Cmake:当位置不存在时,使用add_custom_command将二进制文件复制到特定位置失败

时间:2011-05-25 06:42:06

标签: cmake

我正在尝试将cmake生成的所有二进制文件复制到特定目录。我不想使用EXECUTABLE_OUTPUT_PATH,将它们保留在构建树中,使开发更容易。

所以我使用add_custom_command添加帖子构建副本

# set the final binary dir
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/bin)

# get name and location of binary, namecan change with os (cf. ".exe" suffix on windows)
GET_TARGET_PROPERTY(EXAMPLE_BIN_NAME example LOCATION)
# copy bin to binary folder
ADD_CUSTOM_COMMAND(TARGET example
          POST_BUILD
          COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/.
)

问题是,在第一次构建时,“bin”文件夹不存在(复制失败),但“bin”文件夹就在之后创建。因此,在第二次构建时,副本可以正常工作。

有没有办法让自定义命令创建bin文件夹然后复制二进制文件? 或者是否可以使用cmake两个EXECUTABLE_OUTPUT_PATH?

谢谢!

1 个答案:

答案 0 :(得分:18)

在调用复制命令之前,只需确保目标位置“bin”存在,即:

ADD_CUSTOM_COMMAND(TARGET example
          POST_BUILD
          COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}
          COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/.
)