2017-07-26 4 views
1

実行可能ファイルのクラスに対してユニットテストを行いたいが、target_link_libraries(target library)を使ってlibを追加できるlibにそれらをリファクタリングしたくないとしますcmakeで。exeプロジェクトを別のexeプロジェクトのクラスにリンクする方法

どのようにテストクラスに他のクラスへのアクセス権を与えますか?

1)他のプロジェクトのソースファイルでテストプロジェクトをビルドしますか? 他のプロジェクトからのOBJファイルと別の事

include_directories(${otherExeProjectDir}) 

    set(SOURCE_FILES 
    main.cpp 
    tests.h 
    tests.cpp 
    ${otherExeProjectDir}/otherclass1.h 
    ${otherExeProjectDir}/otherclass2.h 
    ) 

2)リンクテストプロジェクト? 何らかの種類add_library(otherclass.obj)狂気?

3)

+0

私はあなたの質問を理解していません。プロジェクトにクラスがあり、このクラスの単体テストを行いたいと言っています。あなたがする必要があるのは、そのクラスのヘッドファイルを組み込み、ユニットテストとユニットテストの主な機能を記述することです。 – Yves

+0

2つのプロジェクト:他のプロジェクトとテストプロジェクト。他のプロジェクトにはテストプロジェクトのようにメインがあります。テストプロジェクトでは、ヘッダーを含めるだけでヘッダーを探す場所がわかりません。 – codeMetis

+0

私は分かりません。なぜあなたはそれを含めることができないのですか?それがどこにあるのか分かりませんか? – Yves

答えて

2

あなたのメインの実行可能なソース位置は、単純なまたは平らである場合には、このような何かが、仕事ができる:

cmake_minimum_required(VERSION 3.9) 
project(tests) 

# Get main executable source location properties 
get_target_property(exe_sources exe SOURCES) 
get_target_property(exe_source_dir exe SOURCE_DIR) 

# Remove main entry point file 
list(REMOVE_ITEM exe_sources main.cpp) 

# Add test sources 
add_executable(test1 test1.cpp) 

# Add exe sources to test (assumes sources are relative paths) 
foreach(src IN LISTS exe_sources) 
    target_sources(test1 PRIVATE "${exe_source_dir}/${src}") 
endforeach() 

# Add exe include directories to test 
target_include_directories(test1 PRIVATE 
    ${exe_source_dir} 
    $<TARGET_PROPERTY:exe,INCLUDE_DIRECTORIES>) 

そうでなければ、一般的な解決策は、いくつかの外部の情報に依存して、残念ながら、あり、例えばトップレベルのソースファイルの場所を指定したり、独自のソースプロパティをメインの実行可能なターゲットに追加することができます。

関連する問題