2013-02-06 3 views
0

정의 된 다른 mysql 파일을 포함하는 C++ 코드 _2G_MYSQL_에 정의 된 지시문이 있습니다. 그리고이 토큰이 코드에서 정의 된 경우에만 특정 라이브러리를 사용하고 싶습니다. Makefile에서 이렇게 할 수있는 방법이 있습니까?makefile의 조건문

뭔가 같은

IFDEF _2G_MYSQL_ LIBS = -lstdC++ -lmysqlclient -lz -lcrypt -lnsl -lssl -lcrypto -ldl -lm -lMst_main -lAMR_Reject_DSP -lFalseReject -lMStream_setting 다른 LIBS = -lm - lMst_main -lAMR_Reject_DSP -lFalseReject -lMStream_setting endif

토큰이 헤더 파일에 있고 메이크 파일에 없기 때문에 분명히 작동하지 않습니다. 어떤 제안? 고맙습니다 ! 당신이 gcc (그리고 보통의 텍스트 도구)를 사용하는 경우

+0

그냥 분명, 당신이 라이브러리를 사용하여 실행 파일을 구축하고자, 당신은 선택을 원하는 될 수 있습니다 헤더 파일에 정의 된 선행 처리 매크로에 의존하는 라이브러리. 그게 맞습니까? – Beta

+0

네, 맞아요! :-) – dharag

+0

할 수있는 방법이 있어야합니다! – dharag

답변

0

, 당신은 다음과 같은 방법으로 그것을 할 수 :

SYMBOL=_2G_MYSQL_ 
MAINFILE=myfile.c 

CHECK=$(shell gcc -E -dD $(MAINFILE) | grep $(SYMBOL)) 

ifeq ($(findstring define $(SYMBOL), $(CHECK)),define $(SYMBOL)) 
    LIBS=-lstdc++ -lmysqlclient .... 
else 
     LIBS=-lm -lMst_main ... 
endif 
+0

이것은 나던가 작동하지만 나는 뭔가 잘못하고있는 것 같아요. MAINFILE이 기호가 정의 된 헤더 파일이어야합니까? – dharag

+0

헤더 또는 헤더 파일을 포함하는 c 파일 일 수 있습니다. 'gcc -E -dD'가 작동하는지 확인하십시오. 모든'#define'을 생성해야합니다 – Matthias

+0

예 gcc -E -dD는 작동하지만 ifeq 조건은 결코 만족하지 않습니다. 고마워, 임마 workign,이 작동합니다 – dharag