72

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

我的makefile示例:

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

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

4

2 回答 2

89

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

SET(FAB "po" CACHE STRING "Some user-specified option")

来源:http ://cmake.org/cmake/help/v2.8.8/cmake.html#command:set

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

cmake -DFAB:STRING=po

来源:http ://cmake.org/cmake/help/v2.8.8/cmake.html#opt:-Dvar:typevalue

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

于 2012-10-15T15:33:24.363 回答
41

Ubuntu 16.04 上的 CMake 3.13

这种方法更灵活,因为它不会将 MY_VARIABLE 限制为类型:

$ 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
于 2019-04-19T08:42:03.817 回答