有没有一种方法可以从CMAKE命令行传递C_INCLUDE_DIRS和LD_LIBRARY_PATH,或者有没有一种设置环境变量的方法,使CMAKE能够找到并使用它们?
有没有一种方法可以从CMAKE命令行传递C_INCLUDE_DIRS和LD_LIBRARY_PATH,或者有没有一种设置环境变量的方法,使CMAKE能够找到并使用它们?
目前还不太清楚您想用这些变量做什么。以下是一些可能的方案:
在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
# 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>
语法自动从环境变量中转换路径。请保留 HTML 标签。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
。这在find_library
文档中提到,但并不明显那些是环境变量。所以,例如:
export LIB=$LIB;$LD_LIBRARY_PATH
export INCLUDE=$INCLUDE;$C_INCLUDE_PATH;$CPLUS_INCLUDE_PATH
可能会让你达到想要的目标。