2010-11-19 6 views
5

내 프로젝트에서 헤더 파일을 생성하기 위해 작성한 "스키마"파일과 유틸리티가 있습니다. 나는 응용 프로그램을 빌드하기 위해 cmake와 out of source 빌드를 사용하고 있습니다.cmake를 사용하여 소스에서 헤더를 생성하는 방법은 무엇입니까?

현재 손으로 헤더 파일을 다시 생성 한 다음 응용 프로그램을 빌드해야합니다.

그런 다음이 CMakeLists.txt 문을 생각해 냈지만 원본 디렉터리 대신 빌드 디렉터리에 헤더를 생성합니다.

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

소스 디렉토리에 헤더를 생성 할 수 있습니까?

편집 (답 반영하기 위해) :에,

${CMAKE_CURRENT_BINARY_DIR} 

그래서 : 파일이 완전히 하나

${CMAKE_CURRENT_SOURCE_DIR} 

또는 그것의 경로를 정규화하여 직접 접근 할 수

을 내 소스 디렉토리에 헤더를 생성합니다. CMakeLists.txt의 이전 발췌 내용은 다음과 같습니다.

add_custom_command(
    OUTPUT generated.h 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

실제로 더 간단합니다. 감사

+0

이 실제로 좋은 생각입니다. 생성 된 파일을 소스 디렉토리에 저장할 수 있다면 원하는대로 소스 패키지에 포함됩니다 (내 라이브러리 사용자는 생성자를 수정하지 않는 한 파일을 생성 할 필요가 없기 때문에/또는 소스 데이터 파일). 이는 더 많은 사람들이 내 라이브러리를 컴파일 할 수 있음을 의미합니다! –

답변

5

난 당신이 동일한 소스 및 생성 된 다른 헤더의 결과로 구성이 서로 다른 디렉토리를 구축 만들 수 있으므로 생성 된 헤더가 아니라, 바이너리 디렉토리에 있다고 생각 --to

.

당신은 당신의 프로젝트에 빌드 디렉토리를 포함 할 수 있습니다

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

CMake가 파일을 찾는데 문제가 있다면,'$ {CMAKE_CURRENT_BINARY_DIR}'으로 그것들을 완전히 검증하십시오. 소스 디렉토리에 파일을 만들고 싶다면'configure'와'add_custom_command' 명령에서'$ {CMAKE_CURRENT_SOURCE_DIR} '을 사용할 수도 있습니다. – tibur

+0

나는 생성 된 파일을위한 가장 좋은 장소가 빌드 디렉토리에 있다는 것에 동의한다. 이 헤더는 코딩하는 동안 유용한 코드 완성을 제공하므로 소스 디렉토리에서 편리합니다. 모든 빌드 구성에 대해 동일한 헤더가 있으므로 원본 디렉터리에있는 것이 전혀 위험하지 않습니다. NB : 의견을 수정하는 데 문제가 있습니다. 아마도 대용량 네트워크에서 고유 한 IP를 사용하고 있기 때문입니다. 혼란을 드려 죄송합니다. – amso

관련 문제