2011-10-07 542 views
8

我曾在一个项目中使用过g ++来编译以.c结尾的文件中的C代码。原因是我被告知g ++有更好的警告信息。CMake可以使用g ++编译C文件吗?

我正在切换此项目的构建过程以使用CMake。我发现最初CMake想使用gcc编译C文件。由于诸如在使用时声明变量之类的事情而失败。所以我尝试使用g ++编译C文件,使用CMakeLists.txt文件中的设置

set(CMAKE_C_COMPILER_INIT g++) 

。但是,这将导致错误消息:

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

我一直在重命名我的.c文件到.CPP来解决这个问题,因为这似乎是最简单的办法,我把事情的工作,也许是最好的办法太。但我想知道是否可以强制CMake使用g ++来编译C文件。

+1

“原因是我被告知g ++有更好的警告信息。 - 你能证实吗?我会说这是非常可疑的,因为(据我所知)这两个只是调用具有不同参数的相同编译器(语言,包含路径,链接到的标准库等)的驱动程序。除此之外,g ++不是C编译器,所以你最终编写非常差的C++。 – delnan

+0

如果你正在编写C语言,那么使用C编译器进行编译。 C和C++不是一回事。 – Kusalananda

+0

你说'_This失败,因为像使用time_'声明变量的东西';这听起来像你在C89模式下使用GCC,而不是C99模式。尝试添加'-std = c99'到C编译器 - 不知何故。 –

回答

21

您不应该为此目的重写编译器。如果你确实需要将你的C文件编译为C++,那么你应该教cmake你的文件属于C++语言:

set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX) 
+0

这听起来像我想要做的不是最好的主意,我应该将文件重命名为.cpp。但是,谢谢你的正确答案,知道如何做到我想要的事情真的很有必要。 –

+0

任何想法为什么将这个应用到我的项目中的单个文件会使项目中的所有文件都编译为C++?我有一堆.c文件,我只想将其中一个编译为C++。 – Scorpio

+1

@Scorpio,我真的想要那个症状,但是以一种明确的方式...为什么CMake没有办法将所有.c文件编译为C++? – kchoi