2014-09-09 3 views
1

다른 make 호출에서 이 변경 될 수있는 파일 집합에 따라 파일을 생성하려고합니다.동적으로 생성 된 종속성

은의 당신에게 코드를 보여주지, 더 잘 이해하기 :

cmake_minimum_required(VERSION 2.8) 

project(demo-one C) 

add_custom_command(
    OUTPUT 
     "${CMAKE_BINARY_DIR}/generated.c" 
    COMMAND 
     generate -o "${CMAKE_BINARY_DIR}/generated.c" 
    DEPENDS 
     "$(shell generate-dependencies-list)" 
    COMMENT 
     "Generating generated.c" 
) 

add_executable(main main.c "${CMAKE_BINARY_DIR}/generated.c") 

그래서, 나는 generate 명령을 사용하여 파일 generated.c을 생성 할을하고,이 파일은 파일이 generated-dependencies-list에 의해 지정된 때 재생 될 필요가 명령 변경. 당신이 통지, generated-dependencies-list는 메이크업 호출에 걸쳐 파일의 다른 세트를 생성 할 수 있습니다함에 따라, 다음 이 add_custom_command에 결과를 전달하는 구성시 에게 generated-dependencies-list의 결과를 얻기 위해 가능하지 않습니다.

사실 위의 코드가 어느 정도 작동하지만,이 는 또한 메이크업 규칙이 모든 후, 기대하고있는 무슨으로 을 보이지 않는, 메이크 백엔드에 대한 작동합니다 해킹처럼 보이는, 그것은 해킹는 다음과 같습니다

generated.c: $(shell generate-dependencies-list) 

은 CMake 어떤 기능이 달성했습니다 :

generated.c: ../$(shell\ generate-dependencies-list) 

는 기본적으로,이 같은 결과를 얻기 위해이 규칙 또는 무언가를 원하는?

답변

1

명령 generated-dependencies-list의 출력은 다음이 스크립트와 스크립트의 매개 변수에 의존하는 경우 발생 의존성-list 명령에 의해 지정된 파일이

가 변경 될 때 당신은 DEPENDS 하위에이 스크립트를 추가 할 수 있습니다 옵션 :

add_custom_command(
    OUTPUT 
     "${CMAKE_BINARY_DIR}/generated.c" 
    COMMAND 
     "${CMAKE_CURRENT_LIST_DIR}/generate-dependencies-list" 
    COMMAND 
     generate -o "${CMAKE_BINARY_DIR}/generated.c" 
    DEPENDS 
     "${CMAKE_CURRENT_LIST_DIR}/generate-dependencies-list" 
    COMMENT 
     "Generating generated.c" 
) 
+0

음 ... 나는 당신이 이해하지 못했을 것으로 생각합니다. generate-dependencies-list는 generated.c를 빌드하기위한 종속성을 출력하는 명령입니다.이 출력은 make 호출 전체에서 변경 될 수 있습니다 (예 : 새 파일 추가). 이러한 종속성은 generated.c를 생성하는 데 사용되지만 don 필요한 것은 빌드 시스템의 일부가되어야합니다 (그들은 설치되지 않습니다). – eagleoneraptor

+1

@eagleoneraptor'명령의 출력이 때때로 변경 될 수있는 경우'generate-dependencies-list는 의존성을 출력하는 명령입니다' 스크립트 또는 스크립트의 매개 변수가 변경되면 적어도 (최적의 방법으로)이를 수행 할 수 없습니다. 그것이 바로 [file (GLOB ...)] (http://www.cmake.org/cmake/help/v3.0/command/file.html)이 권장되지 않는 이유입니다. 이 경우 모든 빌드 (즉, 모든 make)마다 아무 것도 변경하지 않고이 명령을 실행해야합니다. –

관련 문제