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

我的项目有一个 makefile,我可以用它来传递一个控制某些构建标志的参数。现在我想使用 CMake 执行相同的操作。我已经创建了 CMakeLists.txt,但是我不知道如何传递参数并检查 CMakeLists.txt中的参数值。

Makefile 示例:

ifeq "$(MY_VARIABLE)" "option_value"
//setting some flags
else
//setting some other flag
endif

然后使用 make MY_VARIABLE=option_value调用 make。 在 CMake 中,如何从命令提示符获取参数并根据参数设置标志?

138002 次浏览

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

SET(MY_VARIABLE "option_value" CACHE STRING "Some user-specified option")

资料来源: https://cmake.org/cmake/help/latest/command/set.html#set-cache-entry

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

cmake -DMY_VARIABLE:STRING=option_value2

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

CMake 3.13 on Ubuntu 16.04 在 Ubuntu 16.04上制作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