4
即使我不想將我的CMakeLists文件綁定到特定的編譯器,我仍然希望啓用某些選項,例如-Wall,我知道很多編譯器支持。在CMake中可移植設置編譯器選項的最佳方式,如-Wall和-pedantic
目前,我做這樣的設置-Wall -pedantic和旗幟,如果他們被當前的編譯器接受:
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag(-Wall temp)
if(temp)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()
check_cxx_compiler_flag(-pedantic temp)
if(temp)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
endif()
有沒有更好的辦法?或者至少有一個更好的方法來做基本相同的事情?上述內容對於其實現的內容而言非常冗長和難看。一個更好的命令會是這樣的:
enable_cxx_compiler_flags_if_supported(-Wall -pedantic)
也許你可以使用['CMAKE_CXX_COMPILER_ID'(https://cmake.org/Wiki/CMake_Useful_Variables#Compilers_and_Tools)變量設置標誌的每個編譯器列表。 (不知道這是否是一個「更好」的方法)。否則,您可以定義一個宏或一個函數,它接受所需標誌的列表並將'check_cxx_compiler_flag()'應用於它們。 – 865719
自己寫入函數'enable_cxx_compiler_flags_if_supported'。也許你想添加-Werror(測試之後)。一些編譯器會警告他們不理解的標誌,並且會使用一系列忽略的標誌來混亂編譯器輸出。 – usr1234567