为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?
Posted
技术标签:
【中文标题】为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?【英文标题】:Why CMake generate Makefile without CMAKE_CXX_FLAGS?为什么 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile? 【发布时间】:2017-12-08 11:10:05 【问题描述】:这是我的完整 CMakeLists.txt 文件:
set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -Wall -Wextra -Wshadow")
set(PROJECT sample)
project($PROJECT)
set(HEADERS
Main.h
)
set(SOURCES
Main.cpp
)
# Add souce file to project for compile
add_executable ($PROJECT $HEADERS $SOURCES)
target_link_libraries( $PROJECT )
但是,在 Makefile 中,我不会从 CMAKE_CXX_FLAGS 中寻找子字符串“-Wall”和其他选项。
为什么?
【问题讨论】:
【参考方案1】:CMAKE_CXX_FLAGS
变量最初是使用project()
命令设置的。在project()
命令之后移动set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS ...")
。
来自CMake Toolchains - Languages 文档:
语言由
project()
命令启用。通过调用project()
命令设置特定语言的内置变量,例如CMAKE_CXX_COMPILER
、CMAKE_CXX_COMPILER_ID
等。如果顶层 CMakeLists 文件中没有项目命令,则会隐式生成一个。默认启用的语言是C
和CXX
。
参考文献
CMake and Make need to be run twice in order to build code successfully CMake: In which Order are Files parsed (Cache, Toolchain, …)?【讨论】:
谢谢,这是工作。但是官方文档中的哪些地方(在项目之后)讲述了这个特性?我找到了项目页面cmake.org/cmake/help/v3.10/command/project.html,但没有关于 CXX 选项和项目的任何说明。 @Xintrea 这是CMake Toolchains - Languages 文档的一部分。我会将此添加到我的答案中。以上是关于为啥 CMake 在没有 CMAKE_CXX_FLAGS 的情况下生成 Makefile?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 CMake 似乎没有使用 add_compile_options 命令应用 -pthread?