2011-10-07 11 views
8

私はg ++を使って.cで終わるファイルでCコードをコンパイルするプロジェクトに取り組んできました。その理由は、g ++にはより良い警告メッセージがあると言われています。CMakeはg ++を使ってCファイルをコンパイルできますか?

私はCMakeを使用するようにこのプロジェクトのビルドプロセスを切り替えています。私は最初にCMakeがgccを使ってCファイルをコンパイルしようとしていたことがわかりました。これは、使用時に変数を宣言するなどの理由で失敗しました。だから私はCMakeLists.txtファイルに設定

set(CMAKE_C_COMPILER_INIT g++) 

を使用してCファイルをコンパイルするために、G ++を使用してみました。しかし、これは、エラーメッセージで結果:

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

私はそれが私は物事を動作させるために最も簡単な方法のようだとして、この問題を解決するための.cppために私の.cファイルの名前を変更し、おそらく最良の方法はされていますあまりにも。しかし、CMakeにg ++を使ってCファイルをコンパイルさせることが可能かどうか疑問に思っていました。

+1

は「理由は、私がG ++は、より良い警告メッセージを持っていることを聞いているということです。」 - それを確認できますか?私はそれが非常に疑わしいと言うでしょう。(私が知る限り)どちらも、異なる引数(言語、インクルードパス、標準ライブラリがリンクされているなど)を持つ同じコンパイラを呼び出すドライバですから、g ++はCのコンパイラので、非常に貧弱なC + +を書くことになります。 – delnan

+0

Cを書く場合は、Cコンパイラでコンパイルしてください。 CとC++は同じものではありません。 – Kusalananda

+0

あなたは '_使用時に変数を宣言するなどの理由で失敗しました'と言っています。 C99モードではなく、C89モードでGCCを使用しているようです。 '-std = c99'をCコンパイラに追加してみてください。何とかしてください。 –

答えて

21

この目的のためにコンパイラをオーバーライドしないでください。あなたは本当にC++のようにあなたのCファイルをコンパイルする必要があるなら、あなたはあなたのファイルは、C++言語に属してcmakeを教える必要があります。

set_source_files_properties(filename.c PROPERTIES LANGUAGE CXX) 
+0

私がやりたかったことは最高のアイデアではないと思うので、ファイルの名前を.cppに変更する必要があります。しかし、正解をいただきありがとうございます。本当に必要な時に、私が望んでいたことをする方法を知ることは有益です。 –

+0

これをプロジェクトの1つのファイルに適用すると、プロジェクト内のすべてのファイルがC++としてコンパイルされます。私はたくさんの.cファイルを持っており、そのうち1つだけをC++としてコンパイルしたいと思っています。 – Scorpio

+1

@Scorpio、私は実際にその症状を望むが、定義された方法で...なぜCMakeはC++としてすべての.cファイルをコンパイルする方法がないのだろうか? – kchoi

関連する問題