【问题标题】:CMake dependencies on a common static libCMake 对公共静态库的依赖
【发布时间】:2023-03-03 13:42:04
【问题描述】:

我有两个独立的项目,每个项目都构建一个共享库,该库与一个公共静态库链接。 在每个共享库的 CMakeLists.txt 中,我将拥有:

add_dependencies(my_shared1 my_common_lib)

add_dependencies(my_shared2 my_common_lib)

静态库有自己的源代码并驻留在自己的文件夹中。定义通用静态 cmake 脚本的最佳方式是什么?

【问题讨论】:

  • 不应该将add_dependencies 替换为target_link_libraries 吗? (这意味着您的my_shared1 库不仅依赖 my_common_lib 之一,而且与它链接
  • 可能!无论如何,我的问题的重点仍然是......
  • 如果你的意思是target_link_libraries,那么答案就在这里:stackoverflow.com/questions/50292879/…(简而言之:使用link_libraries)。
  • 我其实想知道如何让 target_link_libraries 调用 my_common_lib 的构建过程。
  • target_link_libraries 暗示目标级别的依赖关系。也就是说,my_shared1 库的构建只有在 my_common_lib 库构建后才开始。

标签: cmake dependencies static-libraries


【解决方案1】:

如果您的“项目”是紧密耦合的(例如,存在于同一个存储库中/具有相同的父目录),只需在所有三个上面写一个 CMakeLists.txt,为每个项目的调用 add_subdirectory目录。如果你在每个中使用project,它们应该在 VS/XCode 中显示为单独的实体。

如果没有,只需像往常一样为静态库编写CMakeLists.txt,让它自己导出(查看export()install(EXPORTS))并在消费者中使用find_package 来找到它,然后只需target_link_libraries 导入的目标。

如果这些需要存在于单独的存储库中,但您需要在某个地方创建一个构建所有三个的构建,那么您将需要查看@987654326 @。

【讨论】:

  • add_subdirectory 是我要找的。​​span>
猜你喜欢
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
相关资源
最近更新 更多