首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查cmake内部变量?

如何检查cmake内部变量?
EN

Stack Overflow用户
提问于 2014-02-13 19:15:53
回答 1查看 1.3K关注 0票数 2

作为构建过程的一部分,我们需要记录机器和编译器的细节。由于可以通过设置CMAKE_CXX_COMPILER来更改编译器与系统默认值的关系,所以我认为最安全的检测编译器的方法是问cmake自己它使用的是什么。

这是我们在项目中使用的工具链文件的(重要部分):

代码语言:javascript
复制
SET(CMAKE_CXX_FLAGS "-std=c++11")
SET(CMAKE_BUILD_TYPE Release)
SET(CMAKE_OSX_ARCHITECTURES "x86_64" )
SET(CMAKE_CXX_COMPILER /usr/bin/clang++)
SET(CMAKE_C_COMPILER /usr/bin/clang)

现在,我已经创建了一个CMakeLists.txt文件,它与我们在主要项目中使用的文件不同,如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8)
execute_process(COMMAND ${CMAKE_CXX_COMPILER} --version
   OUTPUT_VARIABLE cxx_version)
FILE(WRITE "/tmp/compiler.txt" "Compiler: ${CMAKE_CXX_COMPILER} is ${cxx_version}")

当我在这个CMakeLists.txt上运行cmake并把工具链文件传递给它时,我得到了一个相当安全的方法来确定主项目使用哪个编译器。也就是说,虽然一些草率的开发人员可能会在主项目的命令行中添加一个"-DCMAKE_CXX_COMPILER“(然后/tmp/piler.txt会出错),但是开发人员更有可能编辑工具链文件(然后/tmp/编译程序. That将包含正确的信息)。

问题是,我还想检查是否启用了c++11,但是在我的CMakeLists.txt文件中,我无法检查任何CMAKE变量的设置。如果我这么做:

代码语言:javascript
复制
MESSAGE(STATUS "CMAKE_OSX_ARCHITECTURES are ${CMAKE_OSX_ARCHITECTURES}")
MESSAGE(STATUS "CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}")
MESSAGE(STATUS "CMAKE_CXX_FLAGS are ${CMAKE_CXX_FLAGS}")

消息说,所有这些值都是空的。如果我将自己的一些值添加到我的工具链文件中,并在我的CMakeLists.txt中打印出它们的值,它们是正确的,所以我知道工具链文件正在被处理。

我看到了一些提示,可能是cmake放弃了CMAKE_CXX_FLAGS的值,因为我的CMakeLists.txt没有编译任何东西。这个是可能的吗?或者,cmake只是将其变量的值内化为我的CMakeLists.txt看不到的方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-14 11:34:18

你需要写这个变量来缓存,示例

设置(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11“缓存字符串”一些信息“强制)

注意,在project命令之后更新标志:

代码语言:javascript
复制
message("release flags: ${CMAKE_CXX_FLAGS_RELEASE}")
cmake_minimum_required(VERSION 2.8.4)
project(foo CXX)
message("release flags: ${CMAKE_CXX_FLAGS_RELEASE}")

输出:

代码语言:javascript
复制
release flags:
-- The CXX compiler identification is GNU 4.8.2
-- Check for working CXX compiler: /usr/bin/c++.exe
-- Check for working CXX compiler: /usr/bin/c++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
release flags: -O3 -DNDEBUG
-- Configuring done
-- Generating done
-- Build files have been written to: ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21763488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档