2015-05-03 2 views
3

Я хочу построить 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/.

Хорошо, я понятия не имею, как сделать его работу .. и как

  1. указать установить реж
  2. Lib тип сборки (статический/общий)
  3. тип конфигурирования (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() 
не

Спасибо за любую помощь

+0

В «последней попытке» я попробую «INSTALL_COMMAND» $ {MAKE} install »)', иначе 'BUILD_COMMAND '$ {MAKE} install") '. – Antonio

+0

@Antonio, это даст ошибку: 'Нет правила для установки цели ' – grisha

+0

Я не знаю, может ли это помочь, но ExternaProject_Add имеет [новую документацию] (http://www.cmake.org/ CMake/помощь/v3.2/модуль/ExternalProject.html) – Antonio

ответ

0

В настоящее время (по-видимому, это будет в GLog релизе 0.3.5), есть a CMakeLists.txt included с GLog, поэтому больше нет необходимости в ExternalProject.

Смежные вопросы