这个问题在这里已有答案:
我正在尝试将Rust hello世界构建为更大的catkin / cmake构建的一部分。相关CMakeLists.txt
文件的相关部分是:
add_custom_target(_rtde_interface ALL)
set(CARGO_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR})
add_custom_command( TARGET _rtde_interface
PRE_BUILD
COMMAND cargo build
# WORKING_DIRECTORY ${CARGO_TARGET_DIR}/src/rtde_interface
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/rtde_interface
VERBATIM)
但Cargo的行为就像CARGO_TARGET_DIR变量未设置一样。如果我在调用Catkin之前在shell中设置它,那么二进制文件会显示在我选择的任何目录中,如果我在shell中取消它,则默认为${CMAKE_CURRENT_SOURCE_DIR}/src/rtde_interface/target/
,但构建结果永远不会被放入${CMAKE_CURRENT_BINARY_DIR}
,我不知道为什么。我使用了Cmake message
函数来确认CMAKE_CURRENT_BINARY_DIR包含一个真实的路径......
有任何想法吗?
CMake的set
命令不设置环境变量,它设置CMake变量。如果需要修改在构建时启动的命令的环境,可以使用CMake的命令执行模式。这看起来像这样:
add_custom_target(_rtde_interface ALL)
add_custom_command( TARGET _rtde_interface
PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E env CARGO_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR} cargo build
# WORKING_DIRECTORY ${CARGO_TARGET_DIR}/src/rtde_interface
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/rtde_interface
VERBATIM)
如果注释掉的位实际上是您想要的功能而且工作不正常,您可以将其替换为:
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src/rtde_interface