如何通过add_custom_command指定LD_LIBRARY_PATH?

时间:2018-12-18 21:35:24

标签: linux cmake

我正在尝试通过cmake添加ld_library_path。

到目前为止,我所做的是

add_custom_command(TARGET ${target}
   POST_BUILD
   COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${target}> ${PROJECT_BINARY_DIR}/bin
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   COMMAND $<TARGET_FILE:${target}>
   ################ ENV Set here ####################
   -E env "LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}:${PROJECT_SOURCE_DIR}/boost_linux/lib"

   COMMENT "Running Tests Now .. " VERBATIM
)

但是在运行时我仍然遇到链接错误。是否有人知道如何正确链接lib路径。

在bash中,就像 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/path/to/lib

1 个答案:

答案 0 :(得分:0)

尚不清楚您到底要实现什么目标,以及它与链接错误之间的关系。但是,使用自定义环境变量运行命令的方式如下:

add_custom_command(
  ...
  COMMAND ${CMAKE_COMMAND} -E env "LD_LIBRARY_PATH=..."
    actual command line that you need to execute
)

因此,-E env的工作方式是执行环境变量指定后传递的所有内容。

但是请注意,在以下COMMAND中使用它时,您不能使用多个COMMAND参数并在第一个参数中设置env-它将无法工作。或者,至少,它取决于发电机。使用Make后端,它可以转换为对shell的多次调用-因此它设置了env,但是其余命令是分别执行的,看不到它。忍者生成器将多个COMMAND转换为类似cmd1 && cmd2 && ...之类的东西,以便在AFAIK上正常工作。