CMake具有多个主电源和共享功能的编译项目

San*_*Gil 3 c++ compilation cmake

假设我有两个源文件AB.每个人都有主要和公共功能.

A                 B
|__ main()        |__ main()
|__ foo()         |__ bar()
Run Code Online (Sandbox Code Playgroud)

我想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)
Run Code Online (Sandbox Code Playgroud)

这种配置显然都有两种定义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)
Run Code Online (Sandbox Code Playgroud)

有没有办法实现我想要的?我想不是两个电源,或独立的结合foo,并A main在两个不同的文件.也许使用C++标头?

Som*_*ude 6

拆分A成两个源文件:

  • 一个包含该main函数,并且由A可执行目标使用但不是库.

  • 一个包含库目标foo使用的A_lib函数.

然后将库用于A可执行目标.

这是IMO的"最佳"解决方案.

可以使用预处理器宏来有条件地编译main函数A.cpp.但这不是我推荐的东西.