Как мне сгладить CMake Superbuild?
Трудно изучая, как заставить CMake делать то, что мне нужно в Visual Studio для кроссплатформенного проекта, я узнал о ExternalProject_Add, и он прекрасно решил все мои потребности. Выдержка:
ExternalProject_Add(googletest
PREFIX "${CMAKE_BINARY_DIR}/Downloads/googletest"
GIT_REPOSITORY "https://github.com/google/googletest.git"
GIT_TAG 718fd88d8f145c63b8cc134cf8fed92743cc112f
BINARY_DIR "${CMAKE_BINARY_DIR}/Downloads/googletest/${CMAKE_CFG_INTDIR}/build"
CMAKE_ARGS
"-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/Dependencies/googletest"
"-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
"-DCMAKE_DEBUG_POSTFIX=''"
"-Dgtest_force_shared_crt=ON"
)
Он использует несколько таких зависимостей, и он хорошо работает в Linux и в Windows, где нельзя ожидать установки таких вещей, как LLVM. Проблема в том, что я получаю Makefile / Solution для "superbuild" и еще один для моего реального проекта. Это работает хорошо, но это грязно. Я подумывал попробовать git-модули для получения зависимостей, но я не уверен, что это сработает хорошо. Как я могу уменьшить сложность, чтобы была только одна система сборки?
База CMakeLists.txt находится по адресу https://github.com/coder0xff/Plange/blob/master/CMakeLists.txt
2 ответа
Я обновил свой проект, чтобы не использовать ExternalProject_Add
на всех, а вместо использования add_subdirectory
, Уловка для меня заключалась в том, чтобы set
любые соответствующие переменные до add_subdirectory
,
function(add_googletest)
set(BUILD_GMOCK OFF CACHE BOOL "")
set(BUILD_GTEST ON CACHE BOOL "")
set(INSTALL_GMOCK OFF CACHE BOOL "")
set(INSTALL_GTEST ON CACHE BOOL "")
set(gtest_force_shared_crt ON CACHE BOOL "Force gtest to used shared VC++ CRT")
add_subdirectory(source/googletest)
include_directories("${gtest_SOURCE_DIR}/include")
endfunction(add_googletest)
add_googletest()
На самом деле вы можете использовать ExternalProject
просто для "клонирования" (как способ создания переносимого подмодуля git cmake).
Здесь все объясняют.
примечание: вот домашний проект для тестирования: https://github.com/Mizux/cmake-external