我们正在将基于大型Makefile的项目转换为基于CMake的系统。在构建代码之前,我需要构建许多依赖项。前三个依赖项是使用以下内容构建的:
add_subdirectory(dependencies/libexpat/expat)
add_subdirectory(dependencies/libuuid-1.0.3)
add_subdirectory(dependencies/log4c-1.2.4)
expat有它自己的CMakeLists.txt文件,并且构建没有问题。在继续之前,我想强制将expat安装到登台目录。对于libuuid,我使用的是ExternalProject_Add,作为该过程的一部分,它确实安装在登台目录中。
然后,当我构建需要expat的log4c时,可以将其指向expat的位置。否则,我将需要有人访问expat的临时构建位置的绝对路径。
我尝试在add_subdirectory之后添加以下内容:
add_subdirectory(dependencies/libexpat/expat)
add_subdirectory(dependencies/libuuid-1.0.3)
install(TARGETS expat LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/usr/lib)
add_subdirectory(dependencies/log4c-1.2.4)
不幸的是,CMake不会运行expat的安装代码。如何在构建之后但在构建项目的其余部分之前强制安装expat?
答案 0 :(得分:2)
这看起来像ExternalProject_Add
的主要用例,最好用作 superbuild 设置。这意味着您的顶级项目(“超级构建”)不会构建任何实际的代码,而是仅包含ExternalProject_Add
个调用。您的“实际”项目被添加为这些“外部”项目之一。这使您可以设置具有所有依赖项,顺序等的超级构建。
工作流程如下: