CMakeLists.txt из A
Код: Выделить всё
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/../B ${CMAKE_CURRENT_LIST_DIR}/../B/build)
target_link_libraries(A
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/../B/build/$$/RLnavigationLib.lib
${ITK_LIBRARIES}
)
Код: Выделить всё
cmake_minimum_required(VERSION 3.14)
project(B)
add_library(B SHARED B.h B.cpp)
set(ITK_DIR "${CMAKE_CURRENT_LIST_DIR}/../../OTS/itk/build")
include(${CMAKE_CURRENT_LIST_DIR}/../cmake/getITK.cmake)
target_link_libraries(B PUBLIC ${ITK_LIBRARIES})
target_include_directories(B PUBLIC ${ITK_INCLUDE_DIRS})
# Ensure that B is built only after ITK is fully available
add_dependencies(B ITK_DEPENDS)
set_target_properties(B PROPERTIES
LIBRARY_OUTPUT_DIRECTORY_DEBUG "${PROJECT_BINARY_DIR}/_build/Debug/bin"
LIBRARY_OUTPUT_DIRECTORY_RELEASE "${PROJECT_BINARY_DIR}/_build/Release/bin"
)
target_compile_definitions(B PRIVATE B_EXPORT)
Код: Выделить всё
# Build as an idependent project during build time of the parent project
include(ExternalProject)
set(ITK_SRC_DIR ${CMAKE_CURRENT_LIST_DIR}/../../OTS/itk)
set(ITK_BIN_DIR ${ITK_SRC_DIR}/build)
find_package(ITK QUIET)
if(NOT ITK_FOUND)
message(STATUS "ITK Runtime not found, will be downloaded in build phase into ${ITK_SRC_DIR} and builded to ${ITK_BIN_DIR} ...")
# Download ITK Runtime
ExternalProject_Add(
ITK
GIT_REPOSITORY https://github.com/InsightSoftwareConsortium/ITK.git
GIT_TAG v5.3.0
SOURCE_DIR ${ITK_SRC_DIR}
BINARY_DIR ${ITK_BIN_DIR}
BUILD_IN_SOURCE 0
CMAKE_ARGS
-DITK_BUILD_DEFAULT_MODULES=OFF
-DModule_ITKDistanceMap=ON
-DBUILD_SHARED_LIBS=ON
-DITK_SKIP_PATH_LENGTH_CHECKS=ON
)
find_package(ITK REQUIRED)
endif()
add_custom_target(ITK_DEPENDS ALL DEPENDS ITK)
set(ITK_INCLUDE_DIRS ${ITK_INCLUDE_DIRS} CACHE INTERNAL "ITK include dirs")
set(ITK_LIBRARIES ${ITK_LIBRARIES} CACHE INTERNAL "ITK libraries")
Подробнее здесь: https://stackoverflow.com/questions/790 ... s-in-cmake