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

标签 c++ compilation makefile gnu-make

我在两个“主要”文件中包含一个“帮助程序”文件,这两个“主要”文件被构建到具有相同生成文件的两个可执行文件中。我在帮助文件中有调试打印语句。我希望打印语句实际上打印在一个可执行文件中,而不是另一个。有办法吗?现在我有以下内容,我希望使用为一个可执行文件而不是另一个定义的 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 $<

最佳答案

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

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

注意:这给您留下了从 helper.o 生成 main1-helper.o 的问题。有几种方法可以解决这个问题;但是,您可能更愿意从一开始就使用 automake 而不是推出自己的解决方案。

关于c++ - 使用不同的选项为不同的目标构建相同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852500/

相关文章:

makefile - 强制 make 使用更具体的规则

c++ - 我可以安全地假设 if(true) 和 if(false) 将被优化吗?

c++ - 从文件中获取输入并检查数字是否为质数

matlab - gcc 链接器找不到库 (openNI)

c++ - 如何在子目录中生成带有源代码的 Makefile?

makefile - 如何强制GNU Make不并行构建配方?

c++ - 单向链表在中间添加节点

c++ - 当对象绑定(bind)到成员函数时,为什么 std::function 会调用析构函数?

linux - g++ -D 标志有什么作用?

java - Clojure Leiningen 多个项目编译错误 - ClassNotFoundException