【问题标题】:building the same file for different targets with different options使用不同的选项为不同的目标构建相同的文件
【发布时间】:2011-10-21 16:35:58
【问题描述】:

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

【问题讨论】:

    标签: c++ compilation makefile gnu-make


    【解决方案1】:

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

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

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

    【讨论】:

    • +1 一开始我误读了 Makefile。除了将$(CXXFLAGS) helper.cpp 移动到g++ 链接命令(这看起来有点脏)之外,没有办法拥有两个不同的目标文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-09
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多