使用不同的选项为不同的目标构建相同的文件

时间:2011-10-21 16:35:58

标签: c++ compilation makefile gnu-make

我有两个“主”文件中包含一个“helper”文件,这两个文件内置于两个具有相同makefile的可执行文件中。我在帮助文件中调试了print语句。我希望print语句实际上打印在一个可执行文件中,而不是另一个。有办法吗?现在我有以下内容,我希望编译为DEBUG_PRINT定义一个可执行文件而不是另一个,但我不知道如何。

main1.cpp:

    #include "helper.h"
    ...

main2.cpp:

    #include "helper.h"
    ...

helper.cpp:

    #ifdef DEBUG_PRINT
    cout << "here is a debug message" << endl;
    #endif

生成文件:

    build: main1 main2
    main1: main1.o helper.o
        g++ -g -o main1 main1.o helper.o
    main2: main2.o helper.o
        g++ -g -o main2 main2.o helper.o
    %.o: %.cpp
        gcc -g -c $<

1 个答案:

答案 0 :(得分:4)

您将需要两个不同的目标文件(main1-helper.o和main2-helper.o)和特定于目标的编译器标志:

 main1: CXXFLAGS=-DDEBUG_PRINT
 %.o: %.cpp
      gcc $(CXXFLAGS) -g -o $@ -c $<

注意:这使您无法从helper.o生成main1-helper.o。有几种方法可以解决这个问题;但是,从一开始就使用automake而不是滚动自己的解决方案可能会更舒服。