如何让CMake使用环境变量LD_LIBRARY_PATH和C_INCLUDE_DIRS?

13

有没有一种方法可以从CMAKE命令行传递C_INCLUDE_DIRS和LD_LIBRARY_PATH,或者有没有一种设置环境变量的方法,使CMAKE能够找到并使用它们?

3个回答

22

目前还不太清楚您想用这些变量做什么。以下是一些可能的方案:

  1. 在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_PATHCMAKE_LIBRARY_PATH。例如,要通过命令行传递这些变量,可以执行以下操作

  • cmake -D CMAKE_PREFIX_PATH=/path/to/custom/location
    

    1
    当使用一个代表路径的环境变量并希望项目在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> 语法自动从环境变量中转换路径。请保留 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
    )
    

    0

    如果你想要做(对我来说似乎很明显的)事情,即使用find_libraryfind_path查找其中的内容,我最终发现你应该使用INCLUDELIB。这在find_library文档中提到,但并不明显那些是环境变量。所以,例如:

    export LIB=$LIB;$LD_LIBRARY_PATH
    export INCLUDE=$INCLUDE;$C_INCLUDE_PATH;$CPLUS_INCLUDE_PATH
    

    可能会让你达到想要的目标。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接