使用 ExternalProject_Add 和 ITK

Using ExternalProject_Add with ITK

我正在尝试对 ITK 进行非常简单的 ExternalProject 用法。这将允许我的自动化 jenkins slave 直接检索 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 ? ...
)

这感觉就像一个 hack,特别是很难维护。考虑到我需要 link 到 static 库(我的要求)。


显然,神奇的解决方案对我来说是 运行 find_package(ITK) 并完成。但是由于 ExternalProject 是在构建时完成的,而不是配置时完成的,所以我无法使用它 (ref)。


因为人们觉得它是重复的,所以让我坚持:"Yes I do understand that I cannot use find_package"。我的问题完全不同,而是关于静态 linking.

的复杂情况

所以我不应该在 ITK_LIBRARIES 中构建静态库的有序列表,这太复杂了。相反,我应该使用调用 find_package(ITK).

的逻辑

我需要改变构建项目的方式并切换到 SuperBuild 类型的解决方案。