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

假设我有两个源文件A和B.每个文件都有一个main和一个public函数.

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

我想要bar方法来使用foo函数.如何在CMake项目中编译它?

通过这种配置,B显然不知道A的foo功能.

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)

这种配置显然主要是两种定义.

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)

有没有办法实现我想要的?我不想将两个主电源组合在一起,或者在两个不同的文件中分离foo和A main.也许使用C头?

解决方法:

将A拆分为两个源文件:

>一个包含main函数,由A可执行目标但不是库使用.
>一个包含foo函数的函数,由A_lib库目标使用.

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

这是IMO的“最佳”解决方案.

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

上一篇:javascript – 为什么TypeScript使用对象属性赋值作为对象键和变量赋值作为函数参数?


下一篇:c – 两个编译器彼此不喜欢