从makefile(g ++)创建两个独立的可执行文件 [英] Creating two separate executables from a makefile (g++)

查看:301
本文介绍了从makefile(g ++)创建两个独立的可执行文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前,我有我的makefile设置编译和做一个相当大的项目。我写了一个带有main函数的第二个cpp文件来运行测试。我希望这些单独运行,但一起构建,他们使用相同的文件。

:作为参考,这里是我当前的makefile。我不知道如何调整它。

  CC = g ++ 
CFLAGS = -c -Wall -DDEBUG - g
LDFLAGS =
SOURCES = main.cpp Foo.cpp Bar.cpp Test.cpp A.cpp B.cpp C.cpp
OBJECTS = $(SOURCES:.cpp = .o)
EXECUTABLE = myprogram

all:$(SOURCES)$(EXECUTABLE)

$(可执行):$(OBJECTS)
$(CC) $(LDFLAGS)$(OBJECTS)-o $ @

.cpp.o:
$(CC)$(CFLAGS)$& -o $ @


解决方案

通常,并执行这样的操作:

  .PHONY:所有目标测试

all:target tests

target:...
...

测试:...
...

然后你可以 make (默认为 make all ),或者根据需要只是 make target make tests



所以对于你的makefile例子,你可能想要这样:

  CC = g ++ 
CFLAGS = -c -Wall -DDEBUG -g
LDFLAGS =
COMMON_SOURCES = Foo.cpp bar.cpp A.cpp B.cpp C.cpp
TARGET_SOURCES = main.cpp
TEST_SOURCES = test_main.cpp
COMMON_OBJECTS = $(COMMON_SOURCES:.cpp = .o)
TARGET_OBJECTS = $(TARGET_SOURCES:.cpp = .o)
TEST_SOJECTS = $(TEST_SOURCES :. cpp = .o)
EXECUTABLE = myprogram
TEST_EXECUTABLE = mytestprogram

.PHONY:所有目标测试

all:目标测试

目标:$(EXECUTABLE)

测试:$(TEST_EXECUTABLE)

$(EXECUTABLE):$(COMMON_OBJECTS)$(TARGET_OBJECTS)
$ CC)$(LDFLAGS)$ ^ -o $ @

$(TEST_EXECUTABLE):$(COMMON_OBJECTS)$(TEST_OBJECTS)
$(CC)$(LDFLAGS)$ ^ -o $ @

.cpp.o:
$(CC)$(CFLAGS)$& -o $ @


Currently, I have my makefile set up to compile and make a fairly large project. I have written a second cpp file with main function for running tests. I want these to run separately, but build together and they use the same files. How is this accomplished?

edit: As reference, here is my current makefile. I'm not sure how to adjust it.

CC=g++
CFLAGS=-c -Wall -DDEBUG -g
LDFLAGS=
SOURCES=main.cpp Foo.cpp Bar.cpp Test.cpp A.cpp B.cpp C.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=myprogram

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

解决方案

Normally you would just have multiple targets and do something like this:

.PHONY: all target tests

all: target tests

target: ...
    ...

tests: ...
    ...

Then you can just make (defaults to make all), or just make target or make tests as needed.

So for your makefile example above you might want to have something like this:

CC = g++
CFLAGS = -c -Wall -DDEBUG -g
LDFLAGS =
COMMON_SOURCES = Foo.cpp Bar.cpp A.cpp B.cpp C.cpp
TARGET_SOURCES = main.cpp
TEST_SOURCES = test_main.cpp
COMMON_OBJECTS = $(COMMON_SOURCES:.cpp=.o)
TARGET_OBJECTS = $(TARGET_SOURCES:.cpp=.o)
TEST_OBJECTS = $(TEST_SOURCES:.cpp=.o)
EXECUTABLE = myprogram
TEST_EXECUTABLE = mytestprogram

.PHONY: all target tests

all: target tests

target: $(EXECUTABLE)

tests: $(TEST_EXECUTABLE)

$(EXECUTABLE): $(COMMON_OBJECTS) $(TARGET_OBJECTS)
    $(CC) $(LDFLAGS) $^ -o $@

$(TEST_EXECUTABLE): $(COMMON_OBJECTS) $(TEST_OBJECTS)
    $(CC) $(LDFLAGS) $^ -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

这篇关于从makefile(g ++)创建两个独立的可执行文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆