C++ 如何在我的项目中从cmake中的同一项目中获取多个库

C++ 如何在我的项目中从cmake中的同一项目中获取多个库,c++,build,cmake,shared-libraries,static-libraries,C++,Build,Cmake,Shared Libraries,Static Libraries,我有一个这样的项目: 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.s

我有一个这样的项目:

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
文件

是否有人能为我提供所需内容的明确说明?

您可以在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


您可能缺少
add_子目录
命令?@ernbrown所有
CMakeLists.txt
都已正确链接。缺少的是要求
cmake
构建第二个目标的正确配置,我不知道如何编写。请您发布代码的一小部分好吗?@ErniBrown我恐怕没有法律权利这样做,谢谢您的帮助。这里的问题是如何添加两个独立的库
lib1
lib2
。一方需要哪些资源,另一方需要哪些资源?你的答案中的
PRIVATE
标签是什么?我想你应该学习cmake basis。您需要的行是“add_library(api_1api_1.cpp api_1.h)”。与api_2相同。如果你不知道目标是什么,就忽略它
make your_target # exec1 or lib1