在跨平台CMake 專案中設定編譯器標誌的現代方法
使用CMake 生成器表達式的優雅解決方案
雖然您的方法有效,但現代CMake 使用CMake 的生成器表達式提供了更簡潔、更強大的解決方案:
cmake_minimum_required(VERSION 3.8) project(HelloWorld) string( APPEND _opts "$<IF:$<CXX_COMPILER_ID:MSVC>," "/W4;$<$<CONFIG:RELEASE>:/O2>," "-Wall;-Wextra;-Werror;" "$<$<CONFIG:RELEASE>:-O3>" "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>" ">" ) add_compile_options("${_opts}")
與您原來的方法相比,此方法利用:
棄用手動標誌設定
如您所注意到的,通常不鼓勵手動設定 CMAKE_CXX_FLAGS 和類似變數。相反,偏好使用 add_compile_options() 函數來附加選項,而不修改全域標誌。
多目標項目設定
在同一目錄下,您可以使用CMake 的目標屬性:
add_executable(HelloWorld_Debug_Clang HelloWorld.cpp) target_compile_options(HelloWorld_Debug_Clang PRIVATE "-std=c++1z;-W4") target_link_libraries(HelloWorld_Debug_Clang PRIVATE libc++) add_executable(HelloWorld_Release_Gcc HelloWorld.cpp) target_compile_options(HelloWorld_Release_Gcc PRIVATE "-std=c++1z;-W3") target_link_libraries(HelloWorld_Release_Gcc PRIVATE libstdc++)
這種方法允許您為每個目標指定不同的編譯器選項,同時保留單一專案檔。
現代最佳實務
以上是如何使用生成器表達式在跨平台 CMake 專案中設定編譯器標誌?的詳細內容。更多資訊請關注PHP中文網其他相關文章!