linux - 如何通过 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
解决方案
目前尚不清楚您到底想要实现什么以及它与链接错误有何关系。但是使用自定义环境变量运行命令的方式如下:
add_custom_command(
...
COMMAND ${CMAKE_COMMAND} -E env "LD_LIBRARY_PATH=..."
actual command line that you need to execute
)
因此,-E env
它可以执行在 env 变量规范之后传递的任何内容。
但是请注意,您不能使用多个COMMAND
参数并在第一个参数中设置 env ,同时在以下COMMAND
s 中使用它 - 它不起作用。或者,至少,它依赖于生成器。使用 Make 后端,这被转换为对 shell 的多次调用——因此它设置了环境,但其余命令是单独执行的,看不到它。Ninja 生成器将多个COMMAND
s 转换为类似的东西,cmd1 && cmd2 && ...
因此它在那里工作,AFAIK。
推荐阅读
- maven - Gradle 构建失败“com.google.common.util.concurrent.ExecutionError:java.lang.NoClassDefFoundError:org/gradle/api/internal/java/JavaLibrary”
- architecture - 清洁架构边界
- ipfs - 如何在捆绑中添加轨道数据库?
- c - Linux C/C++ 应用程序部署
- sqlite - 如何获取查询中一行的最终长度?
- java - 如何在 Selenium chrome webdriver 中获取 iframe cookie
- pandas - 通过分隔符','将数据框列分成多列:expand = True,n =-1
- java - 如何使用 ExecutorService 批量运行任务
- php - php+symfony - phpunit 测试 - 无法实例化接口错误
- python - 当代码在我的 python idle 中运行时,Google Kickstart 显示 RE