2017-09-16 21 views
1

일부 C++ 소프트웨어를 코딩하고 GNU autotools로 전체 프로젝트를 관리합니다.# autotools와 #include 의존성 관리

나는 C 코드의 일부분을 가지고 있으므로 "generate.cpp"파일에서 자동으로 생성하는 "generator.rb"스크립트를 만들었습니다.

나는 "object_list.txt"모든 것이 제대로 작동이 시점까지

에서 빌드 타겟 "generated.cpp"그 구조 "generated.cpp"가.

이제이 "generated.cpp"파일을 다른 "handwritten.cpp"에 # 포함시키고 싶습니다. 존재하거나하지 않을 경우, "handwritten.o"를 구축 할 때

  • 는 "generated.cpp"를 재 구축 automake에가보기 자동 포함 파일에 대한 종속성을 계산한다고되어 있기 때문에

    , 나는 그것을 기대 최신

  • 트리거 새로운 "handwritten.o"

을 변경 object_list.txt 때마다 구축하지 그래서 내가 그걸 어떻게 할 수 있습니까?

비고 : 내 소스 트리 그런 식입니다 :

./ 
\_src/ 
| \_handwritten.cpp 
|_design/ 
| \_object_list.txt 
\_tools/ 
    \_generator.rb 

비고 : 내 빌드 나무는 같다 : automake에가보기 자동 포함 된 파일에 대한 종속성을 계산한다고되어 있기 때문에

build/ 
\_gcc_debug/ 
    |_src/ 
    | \_handwritten.o 
    \_design/ 
     \_generated.cpp 

답변

1

Automake가 생성 한 Makefiles가 의존성을 생성하기 때문에 컴파일의 부작용으로 빌드의 일부로 작성된 파일에는 특별한 처리가 필요합니다. 보통 컴파일을 시도하기 전에 그러한 파일을 빌드하도록 Automake에 지시해야합니다. 당신이 generated.cpp을 만드는 데 필요한 규칙을 작성하여 다음에 ...

BUILT_SOURCES = generated.cpp 

: 이것은 같은 BUILT_SOURCES을 사용하여 수행됩니다.

+0

고마워, 나는 그것을 만들었다. 다른 사람에게 유용 할 수있는 정밀도 만 : "make handwritten.o"를 수행 할 때가 아니라 "make"또는 "make check"를 할 때만 작동 할 수 있습니다 (위의 BUILT_SOURCES 링크 참조). 그러나 지금은 나에게 충분하다. – user2174468