【问题标题】:How to make CMake use environment variable LD_LIBRARY_PATH and C_INCLUDE_DIRS如何使 CMake 使用环境变量 LD_LIBRARY_PATH 和 C_INCLUDE_DIRS
【发布时间】:2018-07-21 00:14:44
【问题描述】:

有没有办法从 cmake 命令行传递 C_INCLUDE_DIRS 和 LD_LIBRARY_PATH 或者有没有办法设置 env 以便 CMAKE 可以找到并使用它们?

【问题讨论】:

    标签: build cmake environment-variables


    【解决方案1】:

    尚不完全清楚您打算如何处理这些变量。以下是一些可能性:

    1. 在 CMake 脚本中,您可以使用语法 $ENV{<VARIABLE_NAME>} 读取环境变量。所以在你的CMakeLists.txt 你可以有类似的东西

      message( "Found environment variable LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH}" )
      
    2. 如果您想将此变量中包含的位置添加到您的 CMake 目标可执行文件和库中,那么您可以使用 link_directories() 命令作为

      link_directories( $ENV{LD_LIBRARY_PATH} )
      
    3. 或者,如果您有其他人的项目,并且想要指示 CMake 在其他一些目录中查找库,您可以使用 CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATH。例如,要在命令行中传递这些变量,您可以这样做

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

    【讨论】:

      【解决方案2】:

      在使用表示 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
      )
      

      【讨论】:

        【解决方案3】:

        如果您想对它们做(在我看来)显而易见的事情,那就是让 find_libraryfind_path 找到其中的东西,我终于想通了你应该使用 INCLUDELIB。这是mentioned in the docs for find_library,但这些是环境变量并不明显。所以,例如:

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

        也许会让你到达你想去的地方。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-08
          • 1970-01-01
          • 2023-04-01
          • 2020-06-08
          • 1970-01-01
          • 1970-01-01
          • 2014-02-03
          相关资源
          最近更新 更多