У меня проблема с хранилищем, в котором нет CMakeLists в корневом каталоге, а именно https://github.com/lz4/lz4
CMakeLists.txt находится в подпапке contrib / cmake_unofficial.
Я уже проверял подобные вопросы на SO ( Возможно ли, чтобы файл сборки cmake (CMakeLists.txt) не был в корне в CLion , cmake - CMakeLists.txt не в корневой папке ( но включен в источник) ), но они предоставляют только альтернативы, а не решение, применимое к моей ситуации.
Вот модуль cmake, который я придумал:
if(ENABLE_LZ4)
message(STATUS "Using LZ4.")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_LZ4")
# Enable ExternalProject CMake module
include(ExternalProject)
set(LZ4_SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/lz4)
set(LZ4_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/lib)
# Download and install lz4
ExternalProject_Add(
lz4
GIT_REPOSITORY https://github.com/lz4/lz4.git
GIT_TAG dev
SOURCE_DIR ${LZ4_SOURCE_DIR}
BINARY_DIR ${LZ4_BINARY_DIR}
INSTALL_COMMAND ""
CMAKE_ARGS
${LZ4_SOURCE_DIR}/contrib/cmake_unofficial
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
)
# Get lz4 source and binary directories from CMake project
ExternalProject_Get_Property(lz4 source_dir binary_dir)
# Create a liblz4 target to be used as a dependency by the program
add_library(liblz4 IMPORTED SHARED GLOBAL)
add_dependencies(liblz4 lz4)
include_directories(
${LZ4_SOURCE_DIR}/lib
)
set(LZ4_LIB ${LZ4_BINARY_DIR}/liblz4.so)
else()
message(STATUS "Not using LZ4.")
set(LZ4_LIB "")
endif()
Здесь выводится полная ошибка:
[ 0%] Performing update step for 'lz4'
Current branch dev is up to date.
[ 1%] Performing configure step for 'lz4'
CMake Error: The source directory "/****/build/lz4" does not appear to contain CMakeLists.txt.
Specify --help for usage, or press the help button on the CMake GUI.
CMakeFiles/lz4.dir/build.make:105: recipe for target 'lz4-prefix/src/lz4-stamp/lz4-configure' failed
make[2]: *** [lz4-prefix/src/lz4-stamp/lz4-configure] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/lz4.dir/all' failed
make[1]: *** [CMakeFiles/lz4.dir/all] Error 2
Makefile:94: recipe for target 'all' failed
make: *** [all] Error 2
Я попытался добавить путь 'contrib / cmake_unofficial' к переменной CMAKE_ARGS (как видно из модуля выше), но он не работает (кажется, игнорируется?).
Я также пытался использовать PATCH_COMMAND, чтобы скопировать CMakeLists.txt в корень до начала сборки, но относительные пути файла перепутались.
Другими словами, мне нужна команда cmake, которая будет вызываться для сборки библиотеки: cmake contrib / cmake_unofficial.
Я также пытался использовать для этого CONFIGURE_COMMAND, но по какой-то причине получаю ошибку «файл не найден» (хотя путь указан правильно).
У модуля есть и другие проблемы, но меня интересуют только не-root CMakeLists.
Заранее спасибо!