首页 > 解决方案 > 如何在我的项目中的cmake中从同一个项目中获取多个库

问题描述

我有一个这样的项目:

main
|- CMakeLists.txt
|- src
   |- api_1
   |  |- CMakeLists.txt (#1)
   |  |- api_1.h
   |  |- api_1.cpp
   |
   |- api_2
      |- CMakeLists.txt (#2)
      |- api_2.h
      |- api_2.cpp

当我编译 probject 时,我想获得以下对象:

executable
libapi_1.so / libapi_1.a
libapi_2.so / libapi_2.a

该项目当前构建libapi_1.so/ libapi_1.a,但不构建其他两个。由于 probject 的复杂性和晦涩的命名,我无法理解在哪里/如何适当地修改主级别CMakeLists.txt以获得附加.so / .a文件。

有人可以向我提供有关需要什么的明确说明吗?

标签: c++buildcmakeshared-librariesstatic-libraries

解决方案


您可以在 CMakeLists.txt 中设置 2 个(或更多)项目:

project(FullProject)
# config...
add_executable(exec1 ${sources_files}) # This line will create a new executable target
target_link_libraries(exec1 lib_you_need)
# config exec1...

# Now defines another target which is a library
add_library(lib1 ${sources_files}) # This line will create a new library target
target_include_directories(lib1 PRIVATE path_you_need)

当您构建时,您将有 2 个目标:exec1 和 lib1,您可以构建您想要使用的目标:

cmake --build . --target your_target # exec1 or lib1

或者

make your_target # exec1 or lib1

推荐阅读