【发布时间】:2016-06-21 07:10:18
【问题描述】:
似乎这个问题以前经常被问到,但似乎没有一个解决方案适用于我的情况。
我在 CMake/Linux 环境中,必须在 build 步骤中运行可执行二进制文件(尤其是protoc)。
此二进制文件需要一个库,但它未安装(也不能)在标准目录(如/usr)中,因此无法找到该库。
很遗憾,我无法操纵 protoc 调用,因为它嵌入在第 3 方脚本中。
我现在可以在每个 make 之前设置 LD_LIBRARY_PATH 或在系统范围内设置它,但这非常不方便,尤其是在涉及进行构建的 IDE 或具有连续构建环境的分布式构建场景时。
我尝试通过
设置LD_LIBRARY_PATH
set(ENV{LD_LIBRARY_PATH} "/path/to/library/dir")
但这似乎在构建步骤中没有效果。
所以我的问题是:我可以在 CMake 中设置在构建期间使用的库搜索路径吗?
【问题讨论】:
-
这个stackoverflow.com/a/30455909可以帮助你吗?
-
不幸的是,库和可执行文件都在其他地方构建。
-
也许,找到了一种方法:尝试添加到您的
Cmake脚本中:execute_process(COMMAND export LD_LIBRARY_PATH="/path/to/library/dir:$LD_LIBRARY_PATH")希望,Cmake将在子 shell/当前 shell 中启动您的第 3 方脚本 - 然后export会影响它. -
can I set a library search path in CMake which is used during the build?- 如果链接器调用不受 CMake 控制,那么获得正确的库搜索路径的唯一方法是设置相应的环境变量。通过set()在 CMake 中设置环境变量不会影响 build 步骤。可以通过调用 3d-party 脚本来设置环境,但这取决于你如何调用它。
标签: linux linker cmake executable