Makefile 通过命令提示符将参数传递给CMAKE

Makefile 通过命令提示符将参数传递给CMAKE,makefile,cmake,Makefile,Cmake,我有一个用于我的项目的makefile,并且我正在传递一些参数,并基于该参数设置一些标志。我能做到这一点。但是现在我想用cmake做同样的事情。我已经创建了cmakelist.txt,但我不知道如何传递参数并在cmakelist.txt中检查参数值 我的makefile示例: ifeq "$(FAB)" "po" //setting some flags else //setting some iother flag endif 从命令提示符获取参数并基于此设置标志的方

我有一个用于我的项目的makefile,并且我正在传递一些参数,并基于该参数设置一些标志。我能做到这一点。但是现在我想用cmake做同样的事情。我已经创建了
cmakelist.txt
,但我不知道如何传递参数并在
cmakelist.txt
中检查参数值

我的makefile示例:

ifeq "$(FAB)" "po"
      //setting some flags
else
      //setting some iother flag
endif

从命令提示符获取参数并基于此设置标志的方法是什么?

在CMakeLists.txt文件中,创建一个缓存变量,如下所述:

SET(FAB "po" CACHE STRING "Some user-specified option")
资料来源:

然后,使用GUI(ccmake或cmake GUI)设置缓存变量,或在cmake命令行上指定变量的值:

cmake -DFAB:STRING=po
资料来源:


如果您的选项实际上是布尔值,请将缓存变量修改为布尔值。

Ubuntu 16.04上的CMake 3.13

这种方法更灵活,因为它不会将MY_变量约束为以下类型:

$ cat CMakeLists.txt 
message("MY_VARIABLE=${MY_VARIABLE}")
if( MY_VARIABLE ) 
    message("MY_VARIABLE evaluates to True")
endif()

$ mkdir build && cd build

$ cmake ..
MY_VARIABLE=
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=True
MY_VARIABLE=True
MY_VARIABLE evaluates to True
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=False
MY_VARIABLE=False
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=1
MY_VARIABLE=1
MY_VARIABLE evaluates to True
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=0
MY_VARIABLE=0
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

如果在CMakeLists.txt文件中创建缓存变量,然后通过调用cmake传递参数,那么CMakeList.txt文件是否会继续覆盖参数值?否,缓存在第一次运行时使用默认值或命令行提供的值(如果提供)填充。第一次运行后,将忽略CMakeLists.txt
SET
命令,并使用缓存值。这允许您调整这些选项并使它们保持不变。我在CMakeList.txt中创建了一个带有“false”的布尔put SET(),然后调用了带有“true”的cmake命令。根据我的实验,SET()中的值被视为默认值?SET中的任何值都是默认值,这意味着如果没有在命令行中指定。即使已设置缓存,命令行也始终重写。如果你还有问题,请问一个新问题