c++ - CMake ExternalProject_Add() 和 FindPackage()

是否有正确的方法来查找使用 ExternalProject_Add() 构建的库(通过 FindPackage())?

问题是 CMake 在 CMake 时找不到库,因为外部库是在编译时构建的。我知道在 super 构建中构建库和项目时可以结合这两个 CMake 函数,但我想在普通 CMake 项目中使用它。

事实上,我想用 ExternalProject_Add 构建 VTK 6,并在我的 CMake 项目中使用 FindPackage 找到它。

最佳答案

有办法做到这一点。但这有点骇人听闻。 您基本上添加了一个自定义目标,在构建期间重新运行 cmake。

您必须在一个小型测试项目中尝试此方法,以确定它是否适合您

find_package(Beaengine)


############################################
#
#    BeaEngine
#
include(ExternalProject)
externalproject_add(BeaEngine
    SOURCE_DIR            ${PROJECT_SOURCE_DIR}/beaengine   
    SVN_REPOSITORY        http://beaengine.googlecode.com/svn/trunk/
    CMAKE_ARGS            -DoptHAS_OPTIMIZED=TRUE -DoptHAS_SYMBOLS=FALSE -DoptBUILD_64BIT=FALSE -DoptBUILD_DLL=FALSE -DoptBUILD_LITE=FALSE
    INSTALL_COMMAND       ""
 )


if(NOT ${Beaengine_FOUND})
    #rerun cmake in initial build
    #will update cmakecache/project files on first build
    #so you may have to reload project after first build
    add_custom_target(Rescan ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} DEPENDS BeaEngine)
else()
    #Rescan becomes a dummy target after first build
    #this prevents cmake from rebuilding cache/projects on subsequent builds
    add_custom_target(Rescan)
endif()




add_executable(testapp testapp.cpp )
add_dependencies(testapp Rescan)
if(${Beaengine_FOUND})
    target_link_libraries(testapp ${Beaengine_LIBRARY})
endif()

这似乎适用于 mingw makefiles/eclipse makefile 项目。 vs 将在首次构建后请求重新加载所有项目。

https://stackoverflow.com/questions/17446981/

相关文章:

xcode - 了解 Xcode 的 Copy Headers 阶段

plugins - 未找到自定义 Gradle 插件 ID

command-line - 如何从命令行构建 IntelliJ 项目?

java - 如何使用 Jenkins 参数化构建?

c# - 如何获得本地 Visual Studio 构建完成的通知?

java - 错误 :Could not initialize class com. android

android - 多项目结构的 Gradle 构建速度非常慢

ios - 如何在 Xcode 4 中自动增加捆绑版本?

tfs - Cruise Control .Net 与 Team Foundation 构建

gradle - 如何更改 gradle 插件存储库?