2017-04-07 12 views
2

2つのソースファイルABがあるとしましょう。それぞれには、メインとパブリックの機能があります。複数のメインと共有関数を持つCMakeコンパイルプロジェクト

A     B 
|__ main()  |__ main() 
|__ foo()   |__ bar() 

私はbar方法がfoo機能を使用します。これをCMakeプロジェクトでどのようにコンパイルできますか?

この設定では、Bは、Afoo機能をよく知りません。

cmake_minimum_required(VERSION 3.5) 
project(My_project) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3") 

add_executable(A A.cpp) 
add_executable(B B.cpp) 

この構成では、両方とも、mainの定義があります。

cmake_minimum_required(VERSION 3.5) 
project(My_project) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -O3") 

set(SOURCE_FILES A.cpp) 
add_library(A_lib STATIC ${SOURCE_FILES}) 

add_executable(A A.cpp) 
add_executable(B B.cpp) 

target_link_libraries(B A_lib) 

私が欲しいものを達成する方法はありますか?両方のメインを組み合わせたり、fooA mainを別々のファイルに分けてはいけません。たぶんC++ヘッダーを使用していますか?

答えて

6

2つのソースファイルに分割Amain機能を含む

  • 一つ、とA実行可能な目標ではなく、ライブラリによって使用されます。

  • foo関数を含むもの。A_libライブラリターゲットで使用されます。

実行可能なターゲットのライブラリも使用してください。A

これは "最高の" IMOソリューションです。

mainの関数を条件付きでコンパイルするためのプリプロセッサマクロをA.cppに使用します。しかし、それは私がお勧めするものではありません。

関連する問題