【问题标题】:how to get multiple libraries from the same project in cmake in my project如何在我的项目中的cmake中从同一个项目中获取多个库
【发布时间】:2019-03-06 14:33:07
【问题描述】:

我有一个这样的项目:

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

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

【问题讨论】:

  • 您可能缺少add_subdirectory 命令?
  • @ErniBrown 所有CMakeLists.txt 都已正确链接。缺少的是要求cmake 构建第二个目标的正确配置,我不知道该怎么写。
  • 你能发布你的代码的最小部分吗?
  • @ErniBrown 恐怕我没有这样做的合法权利

标签: c++ build cmake shared-libraries static-libraries


【解决方案1】:

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

【讨论】:

  • 感谢阿德里安的帮助。这里的问题是如何添加两个独立的库lib1lib2。一个需要哪些来源,另一个需要哪些来源?你答案中的PRIVATE 标签是什么?
  • 我猜你应该学习cmake基础。您需要的行是`add_library(api_1 api_1.cpp api_1.h)`。与 api_2 相同。如果您不知道它们是什么,请忽略 target_XXX
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多