2017-12-08 31 views
1

これは私の完全なCMakeLists.txtファイルです:なぜCMakeはCMAKE_CXX_FLAGSなしでMakefileを生成するのですか?

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の中で私は「-Wall」とCMAKE_CXX_FLAGSから他のオプションをサブストリング求めていません。

なぜですか?

答えて

2

CMAKE_CXX_FLAGS変数は、最初にproject()コマンドで設定されます。 project()コマンドの後にset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ...")を移動します。

CMake Toolchains - Languagesからdocumenation:

言語はproject()コマンドで有効になっています。 CMAKE_CXX_COMPILER,CMAKE_CXX_COMPILER_IDなどの言語固有のビルトイン変数は、project()コマンドを呼び出して設定します。最上位のCMakeListsファイルにプロジェクトコマンドがない場合は、暗黙的に生成されます。デフォルトで有効な言語はCCXXです。

参照

+0

おかげで、これは仕事です。しかし、公式のドキュメンテーションのどこで(プロジェクトの後で)この機能について語ったのですか?プロジェクトページhttps://cmake.org/cmake/help/v3.10/command/project.htmlが見つかりましたが、CXXのオプションとプロジェクトについては何も言及されていません。 – Xintrea

+0

@Xintrea [CMake Toolchains - 言語](https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#languages)のドキュメントの一部です。私はこれを私の答えに加えます。 – Florian