如何从命令行设置 CMake 路径

Emi*_*rik 4 cmake

有什么区别

CMAKE_PREFIX_PATH=$PWD/../../qt5/qtbase/:$PWD/../../opencv/build/install/ cmake ..
Run Code Online (Sandbox Code Playgroud)

cmake -D CMAKE_PREFIX_PATH=$PWD/../../qt5/qtbase/:$PWD/../../opencv/build/install/ ..
Run Code Online (Sandbox Code Playgroud)

对我来说,第一个似乎工作正常,但第二个不行!我很想知道为什么。

据我了解,在第一个版本中,shell 在调用 cmake 命令之前设置变量,而第二个版本则告诉 cmake 设置变量。那是对的吗?

Com*_*sMS 6

在大多数情况下您会想要使用第二个版本。

\n\n

正如您所注意到的,第一个版本将变量设置为 shell 环境变量,而第二个版本设置 CMake 变量。

\n\n

请注意,我们在这里讨论两个不同的变量,它们都被命名为CMAKE_PREFIX_PATH。引用手册find_file

\n\n
\n
    \n
  1. 在cmake 特定的缓存变量中指定的搜索路径。这些旨在与 -DVAR=value 一起在命令行上使用。NO_CMAKE_PATH如果通过,则可以跳过此操作。

    \n\n

    [...]

    \n\n

    CMAKE_PREFIX_PATH

  2. \n
  3. 在cmake 特定的环境变量中指定的搜索路径。这些\n旨在在 user\xe2\x80\x99s shell 配置中设置。如果传递 NO_CMAKE_ENVIRONMENT_PATH,则可以跳过此操作。

    \n\n

    [...]

    \n\n

    CMAKE_PREFIX_PATH

  4. \n
\n
\n\n

另请注意,您的第一个版本是不可移植的并且特定于您正在使用的 shell。例如,Windows shell 将完全拒绝该命令。

\n\n

您的第二个版本不适合您的原因是您正在使用$PWDshell 中的变量,而 CMake 无法理解该变量。在第一个版本中,它将扩展到您当前的工作目录,而第二个版本只会将未解析的文字字符串传递$PWD给 CMake。

\n