我正试图建立一个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之前在外壳中设置了二进制文件,则二进制文件会显示在我选择的任何目录中,并且如果我在外壳中将其保留为未设置状态,则默认为${CMAKE_CURRENT_SOURCE_DIR}/src/rtde_interface/target/
,但是构建结果永远不会放入{{1} },我也不知道为什么。我已经使用Cmake ${CMAKE_CURRENT_BINARY_DIR}
函数来确认CMAKE_CURRENT_BINARY_DIR包含真实路径...
有什么想法吗?
答案 0 :(得分:1)
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