将ExternalProject_Add与ITK

时间:2017-05-04 12:41:37

标签: cmake static-linking itk

我正在尝试对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;。我的问题完全不同,而是关于静态链接的复杂情况。

1 个答案:

答案 0 :(得分:0)

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

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