Я хочу построить Google glog с CMake как часть более крупного проекта (решение, на словах Visual Studio). То, что я хочу, чтобы в результате:Создание Google glog с CMake на Linux
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX:PATH=xxx {MAIN CMakeLists.txt location}
cmake --build . --target install --config Debug
будет строить решение в Debug
конфигурации и установить файлы в папку xxx
.
Ok, glog
является суб проект основного решения:
add_subdirectory(third_party/glog_0.3.4)
В Windows все нормально (see CMakeLists.txt): все работает, как ожидалось.
Чтобы создать glog
в Linux, мне также необходимо настроить файлы .h.in
(среди прочих работ). CMake configure_file
не работает: у меня есть .h
файлов, но они содержат только #undef
. Но glog
«s ./configure
работает нормально, так что я нашел, что ExternalProject_Add() может помочь:
if(UNIX)
include(ExternalProject)
ExternalProject_Add(glog
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure
CMAKE_GENERATOR 'Unix Makefiles'
BUILD_COMMAND ${MAKE})
endif()
И cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX:PATH=xxx .
работает отлично, но cmake --build . --target install --config Debug
даст мне:
make: *** No rule to make target 'install'. Stop.
Если я вызываю cmake --build . --config Debug
, то он будет построить и установить glog до /usr/local/lib
. Следующая попытка:
if(UNIX)
include(ExternalProject)
get_filename_component(glog_absolute_install_dir ${CMAKE_INSTALL_PREFIX} ABSOLUTE)
ExternalProject_Add(glog
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/configure --prefix=${glog_absolute_install_dir}
CMAKE_GENERATOR 'Unix Makefiles'
BUILD_COMMAND ${MAKE}
INSTALL_DIR ${glog_absolute_install_dir}
INSTALL_COMMAND "${MAKE}")
endif()
не будет устанавливать файлы xxx
и просто построить его glog-prefix/src/glog-build/
.
Хорошо, я понятия не имею, как сделать его работу .. и как
- указать установить реж
- Lib тип сборки (статический/общий)
- тип конфигурирования (Debug/Release) - не уверен, что теперь он работает
в Windows, в соответствии с документацией GLog, за 2-й случай я делать дальше:
add_library(${lib_name} ${lib_type} ${src_files})
if(build_shared_lib)
add_definitions(-DLIBGLOG_EXPORTS)
else()
add_definitions(-DGOOGLE_GLOG_DLL_DECL=)
endif()
не
Спасибо за любую помощь
В «последней попытке» я попробую «INSTALL_COMMAND» $ {MAKE} install »)', иначе 'BUILD_COMMAND '$ {MAKE} install") '. – Antonio
@Antonio, это даст ошибку: 'Нет правила для установки цели ' – grisha
Я не знаю, может ли это помочь, но ExternaProject_Add имеет [новую документацию] (http://www.cmake.org/ CMake/помощь/v3.2/модуль/ExternalProject.html) – Antonio