使用相同的库

时间:2017-04-06 18:09:34

标签: cmake

在CMake中构建(不是一次)多个使用相同库的项目的做法是什么?据我所知,在CMake中,人们倾向于使用子目录方法。但是库不能是没有库源复制的多个项目的真实子目录。还有一个顶级的CMakeLists.txt方法,但我不认为这是一个很好的解决方案,因为你必须为每个项目创建它,它必须是项目目录的一个级别,它不能很好地控制源代码(像GIT一样,你想为单个项目提供单一的存储库/目录。

2 个答案:

答案 0 :(得分:1)

CMake是一种跨平台制作工具,用于制作"制作"包含子项目的项目。因此,任何一个来源都是这个结构的一部分。但是IMHO cmake不是管理一个主要项目树中所有项目的工具。

我的方法是设置独立项目。每个项目都构建lib,测试,文档并将其安装到项目存储中。如果其他库或应用程序需要其中一个库,则在该项目的cmake文件中引用它。

因此,项目的发布是独立的,项目较小,可以根据需要进行组合。

我使用脚本来构建应用程序的所有库。但这可以用cmake代替。

  • 根据库的构建,构建最顶级的项目
  • 将自定义命令添加到大多数顶级项目中以触发引用的lib的构建。

可能的解决方案:

add_custom_command(TARGET myapp PRE_LINK
                   COMMAND cd /mypath/libA && mkdir build && cd build && cmake ../source && make install)
add_custom_command(TARGET myapp PRE_LINK
                   COMMAND cd /mypath/libB && mkdir build && cd build && cmake ../source && make install)
add_executable(myapp ${SOURCES})

答案 1 :(得分:1)

我实际上找到了一个可接受的解决方案: http://www.mail-archive.com/cmake@cmake.org/msg39062.html 它在某种程度上类似于在add_subdirectory中指定上层目录但不污染项目的CMakeLists.txt文件的想法,而是通过CMake参数传递依赖项目路径。这样项目的CMakeLists.txt文件似乎服从普通的CMake子目录层次结构。我必须说,CMake以某种方式迫使我们使用子目录层次结构感觉有点不对,但我不知道这背后的所有原因,所以可能它很好。