2011-11-11 49 views
13

主にアプリケーションをCに書き込みますが、一部のサブモジュールはC++(Linuxの場合)に書かれています。問題は、CMakeLists.txtファイルをいくつかのサブディレクトリにg++、別のサブディレクトリにgccを使用するように書き込む方法です。CMAKEとCとC++の混合

答えて

13

コンパイラとリンカは、通常設定されていない場合はファイル拡張子によって決まります。したがって、ファイルのエンディングが問題ない限り、コードはコンパイルされ、正しいコンパイラにリンクされます。

CおよびC++を混在させる場合は、正しいextern C宣言を覚えておいてください。

+2

から選択されます。 "そうでないと設定されていない場合、つまり' CMakeLists.txt'の一番上にあり、sayの代わりに 'project(myproject)' 'プロジェクト(myproject C)' – congusbongus

1

g ++とgccの違いは、基本的にg ++が-lstdC++をリンカに渡すことです。 C++標準ライブラリをC++モジュールの明示的な依存関係として追加するだけです。

gccは、C++コードをコンパイルできます。 gccとg ++はこの点で同じです。違いは、g ++を使用する場合、libstdC++にリンクするようにコンパイラに明示的に指示する必要はないということだけです。

+0

ありがとう、私は質問を書き換えました。この部分はOKですが、特定のサブディレクトリにgcc/g ++を指定する方法を知りたいと思います。 – Cartesius00

+0

gccを使い、必要なときにlibstdC++に明示的に依存できる場合、g ++をいくつかのサブディレクトリで使用する必要はありますか? – bames53

+0

既存のCコードとC++コードを混在させる必要があります。 – Cartesius00

4

ソースファイルのLANGUAGEプロパティを "CXX"に設定できます。 documentationを参照してください。

5

CMakeはこれを自動的に行います。あなたは自由にあなたのCMakeLists.txtファイル内のファイルの両方のタイプを混在できます。

. . . 
add_executable(
    my_program 
    code.cpp 
    more_code.c 
) 

私はこのすべての時間を行うと、それだけで動作します。

+2

Cヘッダーガードが必要であることに注意してください。ですから、code.cppでは、 'extern" C "{#include" more_code.h "}' – Unapiedra