假设我有两个源文件A
和B
。每个人都有主要和公共功能。
A B
|__ main() |__ main()
|__ foo() |__ bar()
我希望bar
方法使用foo
函数。如何在CMake项目中编译它?
使用此配置,B
显然不了解A
的{{1}}功能。
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)
的两种定义。
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)
和foo
分隔在两个不同的文件中。也许使用C ++标题?
答案 0 :(得分:6)
将A
拆分为两个源文件:
一个包含main
函数的函数,由A
可执行目标但不是库使用。
包含foo
函数的函数,由A_lib
库目标使用。
然后将库用于A
可执行目标。
这是IMO的“最佳”解决方案。
你可以使用预处理器宏来有条件地编译main
中的A.cpp
函数。但这并不是我推荐的。