在CMake中构建(不是一次)多个使用相同库的项目的做法是什么?据我所知,在CMake中,人们倾向于使用子目录方法。但是库不能是没有库源复制的多个项目的真实子目录。还有一个顶级的CMakeLists.txt方法,但我不认为这是一个很好的解决方案,因为你必须为每个项目创建它,它必须是项目目录的一个级别,它不能很好地控制源代码(像GIT一样,你想为单个项目提供单一的存储库/目录。
答案 0 :(得分:1)
CMake是一种跨平台制作工具,用于制作"制作"包含子项目的项目。因此,任何一个来源都是这个结构的一部分。但是IMHO cmake不是管理一个主要项目树中所有项目的工具。
我的方法是设置独立项目。每个项目都构建lib,测试,文档并将其安装到项目存储中。如果其他库或应用程序需要其中一个库,则在该项目的cmake文件中引用它。
因此,项目的发布是独立的,项目较小,可以根据需要进行组合。
我使用脚本来构建应用程序的所有库。但这可以用cmake代替。
可能的解决方案:
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以某种方式迫使我们使用子目录层次结构感觉有点不对,但我不知道这背后的所有原因,所以可能它很好。