gcc 如何使CMake使用gnu17 C标准而不是ISO C17

wfsdck30  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(416)

我试图强制CMake将std= gnu 17而不是std=c17传递给GCC。

set_property(TARGET "${MyProject_${Compile_Type}_NAME}" PROPERTY C_STANDARD gnu17)

在CMakeLists.txt中,但我得到以下错误:

CMake Error at CMakeLists.txt:260 (add_executable):
C_STANDARD is set to invalid value 'gnu17'

当我尝试gnu 11而不是gnu 17时,同样的情况也会发生。我希望它传递标志的原因是我正在使用GCC扩展之一,当使用-pedantic warning levels(我更愿意继续使用)时会产生警告。请注意,这是专门针对C的,而不是C++的。

hof1towb

hof1towb1#

通常情况下,CMake会使用-std=gnu17和普通的C_STANDARD 17,但是如果你想确保CMake会使用编译器特定的扩展,那么你也可以设置C_EXTENSIONS属性:

set_target_properties(<...> PROPERTIES
  C_STANDARD gnu17
  C_EXTENSIONS ON
)

如果您的代码只能与特定的编译器及其扩展一起工作,那么您可能还需要检查编译器:

if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  message(FATAL_ERROR "The project requires g++ to be used as C++ compiler"
endif()

相关问题