2011-10-21 72 views
0

我有兩個「主」文件中包含一個「助手」文件,這兩個文件使用相同的生成文件構建到兩個可執行文件中。我在助手文件中調試打印語句。我希望打印語句實際上打印在一個可執行文件中,而不是其他打印語句。有沒有辦法做到這一點?現在我有以下幾點,我希望能夠編譯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 

的Makefile:

 
    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 $< 

回答

4

您將需要兩個不同的目標文件( main1-helper.o和main2-helper.o)和特定於目標的編譯器標誌:

main1: CXXFLAGS=-DDEBUG_PRINT 
%.o: %.cpp 
     gcc $(CXXFLAGS) -g -o [email protected] -c $< 

注意:這會使您遇到從helper.o生成main1-helper.o的問題。有幾種方法可以解決這個問題。但是,從一開始您可能會更舒適地使用automake,而不是滾動您自己的解決方案。

+0

+1我最初誤解了Makefile。除了將'$(CXXFLAGS)helper.cpp'移動到'g ++'link命令之外(這看起來很髒),除了兩個不同的目標文件外,沒有辦法。 – user786653

+0

謝謝,這工作。 –

相關問題