设置用于在CMake中构建的链接器搜索路径

fra*_*ans 5 linux linker executable cmake

似乎以前经常有人问过这个问题,但是在我的情况下似乎没有一种解决方案适用。

我在CMake / Linux环境中,必须在构建步骤中运行可执行二进制文件(protoc尤其是)。

该二进制文件需要一个库,但未将其安装(也不能安装在)的标准目录中/usr,因此找不到该库。

不幸的是,我无法操纵该protoc呼叫,因为该呼叫已嵌入第3方脚本中。

现在,我可以LD_LIBRARY_PATH在所有设置之前make设置它,也可以在整个系统上设置它,但这非常不便,特别是在涉及进行构建的IDE或具有连续构建环境的分布式构建方案时。

我试图设置LD_LIBRARY_PATH通过

set(ENV{LD_LIBRARY_PATH} "/path/to/library/dir")
Run Code Online (Sandbox Code Playgroud)

但这似乎在构建步骤中无效。

所以我的问题是:我可以在CMake中设置在构建期间使用的库搜索路径吗?

Joh*_*est 0

尝试这个

SET(ENV{LD_LIBRARY_PATH} "/path/to/library/dir:$ENV{LD_LIBRARY_PATH}")
Run Code Online (Sandbox Code Playgroud)

我还使用了这个肮脏的技巧来临时更改一些环境变量:

LD_LIBRARY_PATH="/path/to/library/dir:$LD_LIBRARY_PATH" cmake ...
Run Code Online (Sandbox Code Playgroud)

执行此行后,LD_LIBRARY_PATH当前 shell 中不会发生更改。

LD_LIBRARY_PATH另外,我认为在调用之前进行更改并不坏cmakeexport LD_LIBRARY_PATH=...

它不会改变系统范围内的任何内容,但它将用于您当前的 shell、当前的构建过程。CI 构建也是如此。您可以保存变量并在cmake调用后恢复它:

MY_LD=$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=...
cmake...
export LD_LIBRARY_PATH=$MY_LD
Run Code Online (Sandbox Code Playgroud)