我正在尝试对ExternalProject
进行非常简单的ITK
使用。这将允许我的自动 jenkins 从属设备直接检索ITK
,而不是使用系统安装的库(因此我将其留作使用ExternalProject
的选项)。
所以我写了下面这段代码:
set(ITK_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/ITK")
set(ITK_INSTALL_PREFIX "${ITK_PREFIX}/install-$<CONFIG>")
ExternalProject_Add(ITK
URL http://sourceforge.net/projects/itk/files/itk/4.6/InsightToolkit-4.6.1.tar.xz
URL_MD5 d8dcab9193b55d4505afa94ab46de699
PREFIX ${ITK_PREFIX}
CMAKE_ARGS -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DBUILD_TESTING:BOOL=OFF -DModule_ITKReview:BOOL=ON -DITK_USE_SYSTEM_GDCM:BOOL=ON -DCMAKE_INSTALL_PREFIX=${ITK_INSTALL_PREFIX} -DGDCM_DIR:PATH=${GDCM_INSTALL_PREFIX}
BUILD_COMMAND "${CMAKE_COMMAND}" --build . --target install --config $<CONFIG>
)
# include directory:
include_directories(${ITK_INSTALL_PREFIX}/include/ITK-4.6)
# link directory:
#link_directories(${ITK_INSTALL_PREFIX}/lib/) # $ sign is escaped
link_directories(${ITK_PREFIX}/install-/lib)
但后来我无法理解如何填充以下变量:ITK_LIBRARIES
我在整个代码库中一直使用它。
我该怎么写:
set(ITK_LIBRARIES
itksys-4.6
ITKCommon-4.6
ITKIOImageBase-4.6
ITKIOMeta-4.6
ITKIOGDCM-4.6
pthread
...? possibly others ? possibly different order ? ...
)
这感觉就像一个黑客,非常难以维护,尤其是考虑到我需要链接到静态库(对我的要求)。
显然,神奇的解决方案是让我运行find_package(ITK)
并完成。但由于ExternalProject
是在构建时完成而没有配置时间,我无法使用它(ref)。
因为人们觉得它是重复的,所以让我坚持:&#34;是的我确实理解我不能使用find_package&#34;。我的问题完全不同,而是关于静态链接的复杂情况。
答案 0 :(得分:0)
所以我不应该在ITK_LIBRARIES
中构建有序的静态库列表,这太复杂了。相反,我应该使用调用find_package(ITK)
的逻辑。
我需要改变构建项目的方式并切换到SuperBuild类型的解决方案。