天天看点

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法

c++标准每天都在进化,以至于老旧的c++和新的c++可能是不同的语言。为了不至于被历史的车轮抛弃太远,这里简单介绍一下,用CMake编译C++17文件的写法:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法
if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
    set( my_std_pre "/std:" )
else()
    set( my_std_pre "-std=" )
endif()

set( basic_cxx17 "c++17" )
set( str_cxx17 "${my_std_pre}${basic_cxx17}" )

include( CheckCXXCompilerFlag )
check_cxx_compiler_flag( "${str_cxx17}" _cpp_17_flag_supported )
if ( _cpp_17_flag_supported )
    set( CMAKE_CXX_STANDARD 17 )
 endif()
           

上述代码在vs2019和gcc9.3.0测试通过。

在vs2019下,不这么做的后果是:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法
cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法

正确的编译结果是:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法

运行如下:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法

在gcc9.3.0下,错误的编译结果为:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法

正确的编译结果为:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法

运行结果为:

cmake 只编译更新的文件_CMake编译C++17文件的跨平台写法