如何从命令行设置CMake路径

时间:2014-08-06 11:48:27

标签: cmake

之间有什么区别
CMAKE_PREFIX_PATH=$PWD/../../qt5/qtbase/:$PWD/../../opencv/build/install/ cmake ..

cmake -D CMAKE_PREFIX_PATH=$PWD/../../qt5/qtbase/:$PWD/../../opencv/build/install/ ..

对我来说,第一个似乎工作得很好但不是第二个!我很想知道原因。

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

2 个答案:

答案 0 :(得分:3)

第二个版本是大多数情况下你想要使用的版本。

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

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

  
      
  1. cmake特定缓存变量中指定的搜索路径。这些是   打算在命令行上使用-DVAR = value。这个可以   如果NO_CMAKE_PATH通过,则跳过。

         

    [...]

         

    CMAKE_PREFIX_PATH

  2.   
  3. cmake特定环境变量中指定的搜索路径。这些   旨在在用户的shell配置中设置。这可以   如果NO_CMAKE_ENVIRONMENT_PATH被传递,则跳过。

         

    [...]

         

    CMAKE_PREFIX_PATH

  4.   

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

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

答案 1 :(得分:0)

您正确地识别了这两个变量之间的差异。它们具有相同的名称,但彼此分开存在-一个是进程环境变量,另一个是CMake的内部变量。

因此,它们受不同规则的约束。按照惯例,环境变量中的路径使用冒号分隔,而CMake列表以分号分隔。

在命令行上定义CMAKE_PREFIX_PATH时,您需要使用分号,例如这样(还必须加上引号,以使shell不会将分号当作命令分隔符):

cmake -D CMAKE_PREFIX_PATH="$PWD/../../qt5/qtbase;$PWD/../../opencv/build/install" ..