2017-08-18 18 views
0

私のcファイルをC++としてコンパイルする必要がある単体テストフレームワーク用のcatchを使用しています。メインプログラムを実行している場合しかし、私はそれは私がC++としてコンパイルされるべき特定のファイルを強制することができますが、その後、私は、メインプログラムをコンパイルすることができませんSET_SOURCE_FILES_PROPERTIESを使用してC.cmake mainプログラムをcとしてコンパイルし、単体テストをC++としてコンパイルします

cmake_minimum_required(VERSION 3.8) 
project(maintenance) 

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") 
set(CMAKE_C_STANDARD 99) 

set(SOURCE_FILES main.c maintenance.c) 
add_executable(maintenance ${SOURCE_FILES}) 

set(MY_TEST_SOURCES maintenance.c maintenance_test.cpp) 
SET_SOURCE_FILES_PROPERTIES(maintenance.c PROPERTIES LANGUAGE CXX) 
add_executable(maintenance_test ${MY_TEST_SOURCES}) 

としてコンパイルすることにしたいです。この行をコメントアウトすると、メインプログラムはコンパイルできますが、単体テストはコンパイルできません。

メインプログラムをcとして、そしてテストソースをC++としてコンパイルするにはどうしたらよいですか?これを行うには

+0

私の視点からは、元のプログラムは「C」であることを有するが、「C++」は少しローミングサービスを持っているとして、それをテストします。テストシステムによって例外がスローされることが予想される場合、 'maintenance.c'を" C "としてコンパイルするだけで十分です。プログラム自体が例外をスローする(直接的にまたは "C++"関数を呼び出すことによって)場合、 'maintenance.c'はプロダ​​クションであっても" C++ "としてコンパイルする必要があります。 – Tsyvarev

+0

テストフレームワーク "catch"では、cファイルをC++としてコンパイルする必要があります。私の特定のケースのコードは、cでコンパイルする必要があります。 – George

+2

@George:CファイルをC++として実際にコンパイルする必要はありません。たぶん、C言語でコードをコンパイルすると、何が間違っているのかをもう少し説明できますか? –

答えて

0

簡単な方法は、シンボリックリンクを作るために次のようになります。

ln -s maintenance.c maintenance-test.cpp 

次に、2つのオブジェクトにコンパイルすることができます:C++を使用して、Cコンパイラと1を使用して1を。

あなたもcmakeのは、生成工程の一部としてシンボリックリンクを作成していることができます。

add_custom_command(OUTPUT maintenance-test.cpp 
    COMMAND ${CMAKE_COMMAND} -E create_symlink maintenance.c maintenance-test.cpp) 
関連する問題