2017-04-07 29 views
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

拆分A成兩個源文件:

  • 一個含有main功能,並且用於由A可執行目標,但不是庫。

  • 一個包含foo函數,該函數由A_lib庫目標使用。

然後使用該庫作爲A可執行目標。

這是IMO的「最佳」解決方案。

可以使用預處理器宏來有條件地編譯中的main函數。但這不是我推薦的東西。