2011-10-21 3 views
0

두 개의 "메인"파일에 하나의 "도우미"파일이 포함되어 있습니다.이 파일은 동일한 메이크 파일을 가진 두 개의 실행 파일에 내장되어 있습니다. 도우미 파일에 디버그 인쇄 문이 있습니다. 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 $< 

답변

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 ++'링크 명령 (일종의 더러운 것 같습니다)으로 옮기는 것과는 별개로 두 개의 다른 객체 파일을 가지는 방법은 없습니다. – user786653

+0

감사합니다. –

관련 문제