Я изменил ваш CMakeLists.txt
файл и провел некоторую оптимизацию, чтобы вы не встраивали исходники. Мой tree
дает это:
--QHull
| |--CMakeLists.txt
| |--CMakeLists.txt.in
| |--src
| |--main.cpp
|--build
с CMakeLists.txt
:
cmake_minimum_required(VERSION 3.0)
project(TestQHull)
configure_file(CMakeLists.txt.in qhull-download/CMakeLists.txt)
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/qhull-download"
)
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/qhull-download"
)
add_subdirectory("${CMAKE_BINARY_DIR}/qhull-src"
"${CMAKE_BINARY_DIR}/qhull-build"
)
include_directories(${CMAKE_BINARY_DIR}/qhull-src/src)
link_directories(${CMAKE_BINARY_DIR}/qhull-build)
### qhullstatic reentrant library
add_library(libqhullstatic_r STATIC IMPORTED)
set_property(TARGET libqhullstatic_r PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/qhull-build/${CMAKE_STATIC_LIBRARY_PREFIX}qhullstatic_r${CMAKE_STATIC_LIBRARY_SUFFIX})
add_dependencies(libqhullstatic_r qhull)
### qhullcpp library
add_library(libqhullcpp STATIC IMPORTED)
set_property(TARGET libqhullcpp PROPERTY IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/qhull-build/${CMAKE_STATIC_LIBRARY_PREFIX}qhullcpp${CMAKE_STATIC_LIBRARY_SUFFIX})
set_property(TARGET libqhullcpp PROPERTY INTERFACE_LINK_LIBRARIES libqhullstatic_r)
add_dependencies(libqhullcpp qhull)
add_executable(${PROJECT_NAME} src/main.cpp)
target_link_libraries(${PROJECT_NAME} libqhullstatic_r libqhullcpp)
и
CMakeLists.txt.in
содержимое это:
cmake_minimum_required(VERSION 3.0)
project(qhull-download NONE)
include(ExternalProject)
ExternalProject_add(qhull
GIT_REPOSITORY https://github.com/qhull/qhull.git
GIT_TAG 2019.1
GIT_PROGRESS TRUE
SOURCE_DIR ${CMAKE_BINARY_DIR}/qhull-src
BINARY_DIR ${CMAKE_BINARY_DIR}/qhull-build
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
CMAKE_CACHE_ARGS ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
Если вы cd build && cmake ../QHull
, он загрузит и начнет сборку qhull для вас.
Единственный недостаток: ExternalProjects
сохраняет ${CMAKE_SOURCE_DIR}\QHull\src
как INCLUDE_DIRECTORIES
вместо необходимого ${CMAKE_BINARY_DIR}\qhull-src\src
.
Поскольку я не мог это исправить, мой обходной путь должен заменить -I${CMAKE_SOURCE_DIR}\QHull\src
на -I${CMAKE_SOURCE_DIR}\QHull\src
в сценарии генератора (например, build.ninja
в моем случае) после шага настройки cmake.
После этого я смог построить собственный пример main.cpp
.