Gcc CMake可以使用g++;编译C文件?

Gcc CMake可以使用g++;编译C文件?,gcc,g++,cmake,Gcc,G++,Cmake,我曾经参与过一个项目,在这个项目中,我使用g++在以.C结尾的文件中编译C代码。原因是我被告知g++有更好的警告消息 我正在将此项目的构建过程切换为使用CMake。我发现CMake最初希望使用gcc来编译C文件。这失败了,因为在使用时声明变量之类的事情。因此,我尝试使用g++通过设置来编译C文件 set(CMAKE_C_COMPILER_INIT g++) 在CMakeLists.txt文件中。但这会导致错误消息: #error "The CMAKE_C_COMPILER is set to

我曾经参与过一个项目,在这个项目中,我使用g++在以.C结尾的文件中编译C代码。原因是我被告知g++有更好的警告消息

我正在将此项目的构建过程切换为使用CMake。我发现CMake最初希望使用gcc来编译C文件。这失败了,因为在使用时声明变量之类的事情。因此,我尝试使用g++通过设置来编译C文件

set(CMAKE_C_COMPILER_INIT g++)
在CMakeLists.txt文件中。但这会导致错误消息:

#error "The CMAKE_C_COMPILER is set to a C++ compiler"

我已经将我的.c文件重命名为.cpp来解决这个问题,因为这似乎是使事情正常运行的最简单的方法,也许也是最好的方法。但是我想知道是否有可能强制CMake使用g++来编译C文件。

您不应该为此重写编译器。如果你真的需要编译你的C文件作为C++,那么你应该教你的文件属于C++语言:< /P>
set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX )

如果需要切换整个项目,请在指令中进行设置:

project(derproject LANGUAGES CXX)

将CGEAR处理所有C文件作为C++文件使用:

file(GLOB_RECURSE CFILES "${CMAKE_SOURCE_DIR}/*.c")
SET_SOURCE_FILES_PROPERTIES(${CFILES} PROPERTIES LANGUAGE CXX )

“原因是我听说g++有更好的警告消息。”-你能证实吗?我认为这是很有问题的,因为(据我所知)这两个都是驱动程序调用不同的参数(语言,包括路径,标准库链接等),除此之外,G++不是C编译器,所以你写的非常差的C++。如果你写C,然后用C编译器编译。C和C++不是同一回事,你说“因为使用时声明变量,所以失败了”;这听起来像是在C89模式下使用GCC,而不是C99模式。尝试将
-std=c99
添加到C编译器-不知何故。感谢您的评论,我一定会考虑这些建议。听起来我想做的不是最好的主意,我应该将文件重命名为.cpp。但是,感谢正确的答案,知道如何在我需要的情况下做我想做的事情是有用的。为什么我在项目中应用这个文件会使项目中的所有文件都被编译成C++?我有一组C文件,我只想把其中的一个编译成C++。为什么Cuple没有一种方法来编译所有的C文件作为C++?你可以做以下处理所有的C文件和C++。代码>文件(GuffyRealCurryCsCuffs:$CMAJOSURCEOSYDIR/*.C++)StIOSOVELCEXFILESULITY(${Cfile }属性语言CXX)< /Cord> Clang打印一个不推荐消息:<代码> CLAN:警告:当C++模式下处理“C”输入时,此行为被弃用[-WeDeRebug ] < /Cord>。