首页 > 解决方案 > 如何通过 add_custom_command 指定 LD_LIBRARY_PATH?

问题描述

我正在尝试通过 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
)

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

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

标签: linuxcmake

解决方案


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

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

因此,-E env它可以执行在 env 变量规范之后传递的任何内容。

但是请注意,您不能使用多个COMMAND参数并在第一个参数中设置 env ,同时在以下COMMANDs 中使用它 - 它不起作用。或者,至少,它依赖于生成器。使用 Make 后端,这被转换为对 shell 的多次调用——因此它设置了环境,但其余命令是单独执行的,看不到它。Ninja 生成器将多个COMMANDs 转换为类似的东西,cmd1 && cmd2 && ...因此它在那里工作,AFAIK。


推荐阅读