像这样的东西:

cmake --get-variable=MY_CMAKE_VARIABLE

该变量可能存在于包含的CMake文件中。

===============>>#1 票数:16 已采纳

如果您有现有的缓存文件,则可以执行以下操作:

grep MY_CMAKE_VARIABLE CMakeCache.txt

如果您还没有缓存文件,并且想要查看CMakeLists.txt文件中有哪些选项,则可以执行(在不同的目录中,因为这将写入缓存文件):

cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE

哪会回到你身边

<VARIABLE>:<TYPE>=<VALUE>

如果它是高级变量,请将-A标志添加到同一命令,它将包含高级变量。 当然,如果你只想要价值,你可以这样做:

cmake -L /path/to/CMakeLists.txt | grep MY_CMAKE_VARIABLE | cut -d "=" -f2

编辑

例如,使用CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project(test)

include(otherFile.txt)

set(MY_VAR "Testing" CACHE STRING "")

而otherFile.txt是:

set(MY_OTHER_VAR "Hi" CACHE STRING "")

该命令(从另一个目录运行):

cmake -L ../cmaketest

得到:

-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tgallagher/cmaketest-build
-- Cache values
CMAKE_BUILD_TYPE:STRING=
CMAKE_INSTALL_PREFIX:PATH=/usr/local
MY_OTHER_VAR:STRING=Hi
MY_VAR:STRING=Testing

因此,它确实显示了其他文件中的变量。 它应该解析整个构建。 但问题是它不会显示任何未标记为CACHE的变量。 并且它不会显示任何缓存的INTERNAL,并且只会显示ADVANCED,如果使用-LA而不是-L。

如果你的变量被标记为INTERNAL或者根本没有CACHE,那么CMake中没有任何方法可以将其拉出来。 但是,非CACHE变量意味着是瞬态的,所以我不确定为什么在构建环境之外你还需要它们。

===============>>#2 票数:6

采用:

cmake -LA -N /path/to/project

获取所有缓存值的列表。 -N很重要; 它可以防止cmake尝试生成任何构建文件,并只显示缓存中的内容。

===============>>#3 票数:4

如果您想要的变量不是您正在设置的变量,而是来自默认值的变量,您可以使用

cmake --system-information

而grep那个。 注意它似乎需要一两秒似乎有点慢。 例如,如果您尝试这样做以首先配置您的cmake vars,它就可以避免将马车放在马前。 :)

您也可以传递一个文件名。 因此,如果它不存在,您可以尝试仅生成它,并解析文件(如果保存1-2秒)。

===============>>#4 票数:3

user variable but can't edit original cmake script, you may resort to a trick. 如果您需要获取用户变量但无法编辑原始cmake脚本,则可以采用一种技巧。 使用以下内容在另一个目录中创建新的CMakeLists.txt文件:

include(<Path to original CMakeLists.txt>)

message(STATUS "MY_VAR={${MY_VAR}}")

很有可能,cmake在新目录中运行时会出现很多错误。 如果在原始脚本中使用相对路径,则肯定是导致此类错误的原因。 但是cmake将打印为变量分配的最后一个值。 此外,使用任何众所周知的文本处理器(假设UNIX熟悉)过滤所有错误和警告,例如:

cmake . | sed -n 's/-- MY_VAR={\(.*\)}/\1/p' 2>&1

我在项目维护脚本中使用这种方法,只要原始CMakeLists.txt没有语法错误,它就是可靠的。

===============>>#5 票数:-3

-D <var>:<type>=<value>

当cmake首次在空构建树中运行时,它会创建一个CMakeCache.txt文件,并使用项目的可自定义设置填充它。 此选项可用于指定优先于项目默认值的设置。 可以根据需要针对尽可能多的高速缓存条目重复该选项。

  ask by Allan translate from so

未解决问题?本站智能推荐:

1回复

CMake在命令行上传递列表

我需要运行swig作为我的cmake构建系统的一部分。 我希望用户能够指定要传递给swig的语言列表,并在命令行中指定它们。 是否有内置的方法让cmake来处理这个问题?
2回复

向CMake添加命令行选项

我正在使用CMake构建大型库,我希望用户能够选择性地启用/禁用构建过程的某些部分。 我如何在我的CMake构建中添加命令行选项,例如,以便用户可以键入类似cmake --build-partone --nobuild-parttwo --dothis=true --dothat=fals
1回复

使用cmake和命令行构建MSVC项目

美好的一天! 让我们有一个源文件main.cpp和一个包含下一个文本的CMakeLists.txt文件: 假设main.cpp文件包含一个简单的“ Hello,World!”。 程序: 我们可以使用cmake CMakeLists.txt && make构
3回复

CMake命令行选项文档

我正在学习CMake,阅读“Mastering CMake”一书和其他在线资料。 我想知道是否有一些命令行选项的详细文档,例如生成的文件使用的-H和-B。 或者“-E echo”还有其他着色选项。我还没有找到一些这方面的文档。 更新 :现在我看到了CMake版本3.14.4:
3回复

用于C ++ #define的CMake命令行

我需要通过添加编译器开关来编译某个项目的不同版本。 通常我会通过使用add_definitions或类似的东西来做到这一点 在CMakeLists.txt文件中。 但是,在此特定项目中, 我不允许修改任何源,包括CMakeLists.txt文件。 我希望有类似的东西
1回复

从Linux命令行向CMake服务器发送请求

我想在Linux命令行中使用CMake服务器模式。 文档告诉我如下所示启动CMake: 但对我来说,它只有这样: 我试图向服务器发送请求,但我只得到hello响应: 如何向CMake服务器发送请求?
2回复

仅通过命令行在Windows上运行CMake生成的INSTALL.vcxproj?

我有一个C ++程序,我正在尝试在AppVeyor上构建和部署(因此,我没有可用的GUI工具)。 我的项目的依赖项每个都使用CMake作为他们的构建系统,CMake(默认情况下)在Windows上生成Visual Studio项目文件。 其中一个生成的项目文件名为INSTALL.vcxp
3回复

如何在运行时在CTest中传递命令行参数

我正在使用CTest并希望在运行时将命令行参数传递给基础测试。 我知道有很多方法可以将命令行参数硬编码到CMake / CTest脚本中,但我想在运行时指定命令行参数,并将这些参数通过CTest传递给基础测试。 这甚至可能吗?
1回复

用变量开始cmake-gui

我想从具有一些预配置变量的批处理文件开始cmake,例如 不幸的是,这只是启动了cmake-gui而未设置任何路径。 最终目标是创建一个批处理文件,当我右键单击CMakeLists.txt时可以通过上下文菜单运行该批处理文件,该文件将在CMakeLists.txt上方的文件夹中创建
1回复

Cmake无法识别为内部或外部命令。 如何检查使用Windows命令提示符安装的cmake版本[关闭]

如何使用命令行检查Windows 8.1 PC中是否安装了cmake。 运行Windows批处理文件时出现错误“ cmake'未被识别为内部或外部命令,可操作程序或批处理文件”。 请为此提供帮助。 提前致谢