많은 서브 프로젝트가있는 CMake 프로젝트가 있습니다. 각각은 (add_custom_command를 호출하여) 특정 정보가있는 작은 텍스트 파일을 생성하기 위해 제공하는 함수를 사용할 수 있습니다. 마지막 단계에서 모든 파일을 하나의 큰 텍스트 파일로 결합하고 싶습니다.CMake : add_custom_command에 대한 종속성을 동적으로 추가하십시오.
생성 된 파일 (한 곳에서)을 검색하고 병합하는 사용자 지정 명령을 만들었습니다.
문제는이 최종 단계가 실제로 얼마나 많은 파일이 제공 될지 알지 못하는 동안 하위 프로젝트에서 만들어진 모든 작은 단계에 의존하게하고 싶다는 것입니다.
내 마지막 명령을 보이는 같은 :
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
내 생성 - 작은 텍스트 파일에 대한-각-하위 프로젝트 명령은 다음과 같습니다
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
와 나는 그 작은 파일을 만들 때 "combination.txt"를 /path/${sub_project_name}.txt에 의존하도록하고 싶습니다.
그래서 저는 다음과 같이 할 수 있습니다.
add_dependency(combination.txt /path/${sub_project_name}.txt)
그러나 이것은 타겟에서만 작동합니다.
또한 OBJECT_DEPENDS와 set_source_files_properties을 사용하려했지만, (어쩌면 그 add_target의 CPP 파일을 사용하려는?)
마지막 방법으로 얻을 그것이 내가이 볼 일을 할 작동하지 않는 것 같다 모든 작은 파일 경로를 누적하는 캐시 변수를 사용하고 다음과 같이 사용하십시오.
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
그러나 이것은 내가하고 싶은 마지막 것입니다.
정상적으로 작동하지만 예상대로 작동하지 않습니다. make를 호출 할 때마다 모든 대상 (조합, 프로젝트 및 프로젝트 2)이 다시 빌드되므로 파일이 다시 생성됩니다. 이것은 가능한만큼 좋지 않습니다.) 나를 위해 예상되는 동작은 필요하지 않으면 파일을 다시 생성하지 않는 것입니다. CMake의 docs에 따르면 - add_custom_target은 매번 빌드됩니다. add_custom_command로 작동하는 솔루션을 갖고 싶습니다. 종속성이 변경 될 때만 빌드됩니다. –
project.txt를 생성하기 위해 종속성으로 무엇을 사용합니까? 나는 cmake-doc이 말하고자하는 바는 custom_target이 재 빌드되어야하는지 아닌지를 항상 확인한다는 것입니다. 적어도 저처럼 작동하는 것 같습니다. –
글쎄, 우리가 어떻게하는지에 대해 제대로 읽은 후에, 나는 너무 조숙하다는 것을 인정해야한다. 내 대답 업데이트를 참조하십시오. –