【发布时间】:2018-07-21 00:14:44
【问题描述】:
有没有办法从 cmake 命令行传递 C_INCLUDE_DIRS 和 LD_LIBRARY_PATH 或者有没有办法设置 env 以便 CMAKE 可以找到并使用它们?
【问题讨论】:
标签: build cmake environment-variables
有没有办法从 cmake 命令行传递 C_INCLUDE_DIRS 和 LD_LIBRARY_PATH 或者有没有办法设置 env 以便 CMAKE 可以找到并使用它们?
【问题讨论】:
标签: build cmake environment-variables
尚不完全清楚您打算如何处理这些变量。以下是一些可能性:
在 CMake 脚本中,您可以使用语法 $ENV{<VARIABLE_NAME>} 读取环境变量。所以在你的CMakeLists.txt 你可以有类似的东西
message( "Found environment variable LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}" )
如果您想将此变量中包含的位置添加到您的 CMake 目标可执行文件和库中,那么您可以使用 link_directories() 命令作为
link_directories( $ENV{LD_LIBRARY_PATH} )
或者,如果您有其他人的项目,并且想要指示 CMake 在其他一些目录中查找库,您可以使用 CMAKE_PREFIX_PATH 或 CMAKE_LIBRARY_PATH。例如,要在命令行中传递这些变量,您可以这样做
cmake -D CMAKE_PREFIX_PATH=/path/to/custom/location
【讨论】:
在使用表示 path 并希望项目在 Windows 上运行的环境变量时应注意。问题在于 路径分隔符:CMake 使用正斜杠 /,但 Windows 使用反斜杠 \。
要将路径从本机(特定于操作系统)转换为 CMake,可以使用file(TO_CMAKE_PATH) 命令流:
# Save environment variable into the CMake but with the proper path separator
file(TO_CMAKE_PATH "$ENV{SOME_PATH_VAR}" SOME_PATH_VAR_CMAKE)
# Following commands could use the created CMake variable
include_directories(${SOME_PATH_VAR_CMAKE})
另外,find_* 命令(例如find_path)具有 PATH 和 HINTS 选项,可以使用 ENV <VAR> 语法自动从环境变量转换路径:
find_path(MYLIB_INCLUDE_DIRECTORY # Result variable
mylib.h # File to search for
HINTS ENV SOME_PATH_VAR # Take a hint from the environment variable
)
【讨论】:
如果您想对它们做(在我看来)显而易见的事情,那就是让 find_library 和 find_path 找到其中的东西,我终于想通了你应该使用 INCLUDE 和LIB。这是mentioned in the docs for find_library,但这些是环境变量并不明显。所以,例如:
export LIB=$LIB;$LD_LIBRARY_PATH
export INCLUDE=$INCLUDE;$C_INCLUDE_PATH;$CPLUS_INCLUDE_PATH
也许会让你到达你想去的地方。
【讨论】: