함께 연결되는 여러 개의 .xsd 파일로 구성된 .xsd 파일과 함께 제공해야하는 응용 프로그램이 있습니다. 연결에 대한 소스 목록은 모든 라이브러리 종속성을 살펴보고 해당 라이브러리의 속성을 검사하여 파생 될 수 있습니다.add_custom_command에서 여러 파일 연결
function(make_config_xsd)
set(xsd_config ${CMAKE_CURRENT_BINARY_DIR}/config.xsd)
# build up a list of config files that are going to be concatenated
set(config_list ${appcommon_SOURCE_DIR}/config/common.xsd)
# iterate over the library dependencies and pull out config_file properties
get_target_property(libraries ${PROJECT_NAME} LINK_LIBRARIES)
foreach(lib ${libraries})
get_target_property(conf ${lib} config_file)
if(conf)
list(APPEND config_list ${conf})
endif()
endforeach()
# finally, add the app specific one last
list(APPEND config_list ${PROJECT_SOURCE_DIR}/config/config.xsd)
add_custom_command(OUTPUT ${xsd_config}
COMMAND echo \"<?xml version=\\"1.0\\"?><xs:schema xmlns:xs=\\"http://www.w3.org/2001/XMLSchema\\">\" > ${xsd_config}
COMMAND cat ${config_list} >> ${xsd_config}
COMMAND echo \"</xs:schema>\" >> ${xsd_config}
DEPENDS "${config_list}")
add_custom_target(generate-config DEPENDS ${xsd_config})
add_dependencies(${PROJECT_NAME} generate-config)
endfunction()
이 가 나타납니다 작업 : 내가 함께 결국 무엇
는 "옳은 일을"할 응용 프로그램의 CMakeLists.txt 그냥 호출 할 수있는 기능이었다. 하지만 실제로이 문제를 해결하는 "올바른 방법"인지 잘 모르겠다. add_custom_target()
그냥 add_custom_command()
의 출력에 의존하므로 add_dependencies()
도 올바르게 보이지 않습니다. 이와 같이 생성 된 파일에 대한 의존성을 수행하는 직접적인 방법이 있습니까?
경우, 요구 사항이 추가 지정 대상을 만들 수 없습니다. 라이브러리 나 실행 파일의 경우 소스 파일 목록에 파일을 추가하여 파일에 대한 종속성을 지정할 수 있습니다. – Tsyvarev
1. add_custom_command (TARGET $ {PROJECT_NAME} POST_BUILD ....)는 어떻게됩니까? 2. COMMAND $ {CMAKE_COMMAND} -E를 사용하는 것을 선호합니다. 불행히도 고양이 concat가 없습니다. 3. FILE (READ ...) FILE (WRITE) cf를 사용할 수 있습니다. [cmake 메일 링리스트의이 게시물] (https://cmake.org/pipermail/cmake/2010-July/038028.html) –