2017-04-06 176 views
0

是什么在C进行实践建立(不是一次),它使用同一个库中的多个项目?据我所知,在CMake中,人们倾向于使用子目录方法。但是,如果没有库源重复,库不能成为多个项目的真正子目录。还有一个顶级的CMakeLists.txt方法,但是我不认为这是一个好的解决方案,因为你必须为每个项目创建它,并且它必须是项目目录的一个级别,它不能很好地与源代码控制配合使用(比如GIT),您希望单个项目具有单个存储库/目录。CMake的多个项目中使用相同的库

回答

0

我居然在这里找到可接受的解决方案: http://www.mail-archive.com/[email protected]/msg39062.html 这在某种程度上类似于add_subdirectory指定上一级目录的想法,但不污染项目的CMakeLists.txt文件,而是通过CMake参数传递相关的项目路径。这种方式项目的CMakeLists.txt文件似乎服从普通的CMake子目录层次结构。我必须说,CMake以某种方式强迫我们使用子目录层次结构感觉有点不对,但我不知道背后的所有原因,所以可能没关系。

1

的CMake是一个跨平台的make工具“使”,包括包含子项目的项目。因此,一个来源是否是这个结构的一部分。但恕我直言cmake不是管理一个主要项目树中的所有项目的工具。

我的做法是建立独立的项目。每个项目都会构建库,测试,文档并将其安装到项目商店中。在其他库或应用程序需要其中一个库的情况下,它将在该项目的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}) 
+0

我同意你关于使用多个项目,这就是我的意思。 “每个项目都建立这个lib” - 但是如果它没有放在项目的子目录中,它如何构建库?我不能将同一个库源放在多个项目中。它是一个不好的做法,通过以下add_subdirectory调用包含库为项目生成?:'add_subdirectory(“傻瓜” CMake的“$ {} CMAKE_CURRENT_SOURCE_DIR /../ common_library”,“$ {} CMAKE_CURRENT_SOURCE_DIR /../ common_library /建“)' – jozols

+0

AFAIK不可能离开cmake树(最后尝试了一些版本之前)。但为什么不'cmake' +'make' +'make install'是基础库。然后在取决于的CMakeLists.txt中包含** find_library mylib **或** find_package mypackage **?你有没有找到find_library? –

+0

我的项目使用了大量的库,我希望一次性构建它们,而不是单独构建它们,并自己考虑依赖关系。使用add_subdirectory的方法至少从一开始就起作用,但它感觉与CMake有点矛盾:)不知道你的意思是“你有没有find_library out?”,如果我使用find_library进行构建,不需要使用find_library add_subdirectory。 – jozols

相关问题