2017-12-24 45 views
0

에 나는 1 개 대상 (이진 최종 제품)에 다음과 같은 구조의 C 프로젝트플래그 sub-Makefile.am

main.c 
configure.in 
configure 
Makefile.am 
Makefile.in 
folder-1 
..Makefile.am 
..Makefile.in 
..<static library files .c files> 
..<static library files .h files> 
folder-2 
<some .c files> 
<some .h files> 
... 
... 

내가 구성하고 Autotools 내 프로젝트를 컴파일하는 방법을 알고 있습니다. folder-1의 내 라이브러리에 관해서 : 나는 종종 DMYDEBUG라는 플래그를 정의하여 다른 디버그 레벨을 가진 라이브러리의 파일을 변경하려고합니다. 전체 프로젝트에 대한

컴파일 시간이 다소 걸리고 지금, 나는 (1) 최상위 레벨 configure.in 파일 개질시키기에 의해 플래그를 변경할 수 있어요 :

CCONFIGFLAGS="${CCONFIGFLAGS} -DSF_BIGENDIAN -DMYDEBUG=3" 

(2) make clean 실행을 (3) 내가 DMYDEBUG (3) (4)를 실행 최상위 에 ./configure 실행 make

ONL 수정 여기서 편집 configure.in에서 configure 재생 이렇게하면 원하는 효과가 자리를 잡습니다. 매번 전체 프로젝트를 다시 컴파일 할 필요없이 DMYDEBUG (folder-1의 정적 라이브러리에만 해당)을 수정하는 더 좋은 방법이 있습니까?

답변

0

우선, configure.in을 수정하여 플래그 값을 변경하는 것은 끔찍한 일입니다. configure이 정보를 전달하는 사용자 지정 인수 (예 : --with-debug-level=x)를 인식하게하는 것이 훨씬 더 좋습니다. AC_ARG_WITH() 매크로는이 용도로 사용됩니다.

그러나 플래그를 변경하기 위해 프로젝트를 다시 구성해야 할 경우 (먼저 또는 다시 빌드하지 않고 ./configure을 다시 실행해야 함) 플래그를 변경하면 항상 전체 다시 빌드가 필요합니다. 좁은 범위의 재구성을 위해서는 make을 사용하여 플래그 수정을 감지하고 영향을받는 대상을 다시 빌드해야합니다.

make은 파일 수준 종속성 만 인식하므로 매크로 파일 정의를 사용하는 파일 인 헤더 파일에 매크로 정의를 적용해야합니다. #include. Automake를 사용하고 있기 때문에 빌드 시스템을 사용하여 헤더 의존성을 자동으로 인식 할 수 있지만이를 부트 스트랩하기 위해 하나의 클린 빌드를 수행해야 할 수도 있습니다.