2011-10-07 102 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