cmake,add_custom_command,具有来自不同目录的依赖项
我有一个关于CMake的问题,这似乎在这里常见,但没有一个答案似乎解决了我的问题.
在详细信息子目录中,有一个CMakeLists.txt,其中包含: add_custom_command(OUTPUT part.out COMMAND foo --input=part.src --output=part.out DEPENDS part.src) add_custom_target(part_out DEPENDS part.out) 在主目录中有一个CMakeLists.txt,它使用part.out生成另一个文件: add_custom_command(OUTPUT full.out COMMAND bar --input=./details/part.out --output=full.out) add_custom_target(full_out DEPENDS full.out) 问题是我想在这里发生三件事: >如果part.out不存在,则需要生成它 因此,如果我将DEPENDS ./details/part.out添加到add_custom_command(OUTPUT full.out),我将获得第2点和第3点,但不会获得第1点,因为如果我删除part.out然后我调用make full_out我会得到没有规则的错误./details/part.out(因为它是来自另一个目录的规则). 如果我将DEPENDS full_out添加到add_custom_command(OUTPUT full.out)或add_custom_target(full_out),我将获得第1点和第2点,但不是3,因为即使重新生成了part.out,也不会重新生成full.out,因为它不依赖于part.out文件本身. 那么如何连接这两种方案呢?
CMake docs for add_custom_target :
所以我建议用目标“连接”目标 ADD_DEPENDENCIES( full_out part_out ) 编辑: 事实证明,您需要为part.out设置源文件属性 这是我的工作示例(在使用VS2008的Windows下尝试过): 的CMakeLists.txt: cmake_minimum_required(VERSION 2.8 ) project( full ) add_subdirectory( details ) add_custom_command( OUTPUT full.out COMMAND ${CMAKE_COMMAND} -E copy ./details/part.out full.out DEPENDS details/part.out ) add_custom_target( full_out DEPENDS full.out details/part.out details/part.src ) set_source_files_properties( details/part.out PROPERTIES GENERATED TRUE ) add_dependencies( full_out part_out ) 细节/的CMakeLists.txt: cmake_minimum_required(VERSION 2.8 ) project(part) add_custom_command(OUTPUT part.out COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/part.src part.out DEPENDS part.src) add_custom_target(part_out DEPENDS part.out) 这个例子适用于所有3个陈述的案例. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |