是否有正确的方法来查找图书馆(通过FindPackage()
)是用ExternalProject_Add()
?
问题是 CMake 无法在 CMake 时找到该库,因为外部库是在编译时构建的。我知道在超级构建中构建库和项目时可以组合这两个 CMake 函数,但我想在普通的 CMake 项目中使用它。
事实上我想构建 VTK 6ExternalProject_Add
并找到它FindPackage
全部在我的 CMake 项目中。
有一种方法可以做到这一点。但这有点黑客。
您基本上添加了一个自定义目标,该目标在构建期间重新运行 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 将在第一次构建后请求重新加载所有项目。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)