Создание Google Glog с CMake на Linux

Я хочу построить Google Glog с CMake как часть более крупного проекта (решение, по словам Visual Studio). Что я хочу получить в результате:

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 папка.

В порядке, glog Подпроект основного решения:

add_subdirectory(third_party/glog_0.3.4)

На винде все ок (см. CMakeLists.txt): все работает как положено.

Строить glog в линуксе мне нужно настроить .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тогда это будет построить и установить дотронуться до /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, для второго случая я делаю следующее:

add_library(${lib_name} ${lib_type} ${src_files})
if(build_shared_lib)
add_definitions(-DLIBGLOG_EXPORTS)
else()
add_definitions(-DGOOGLE_GLOG_DLL_DECL=)
endif()

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

4

Решение

В настоящее время (по-видимому, это будет в версии 0.3.5), есть CMakeLists.txt включены с glog, так что больше нет необходимости в ExternalProject.

0

Другие решения

Я покажу вам на примере ниже структура моего проекта:

введите описание изображения здесь

Файл FindGLog.cmake в каталоге cmake используется, чтобы найти glog, это содержание:

# - Try to find Glog
#
# The following variables are optionally searched for defaults
#  GLOG_ROOT_DIR:            Base directory where all GLOG components are found
#
# The following are set after configuration is done:
#  GLOG_FOUND
#  GLOG_INCLUDE_DIRS
#  GLOG_LIBRARIES

include(FindPackageHandleStandardArgs)

if (NOT DEFINED GLOG_ROOT)
message("set GLOG_ROOT========================")
set (GLOG_ROOT /usr /usr/local /usr/include/)
endif (NOT DEFINED GLOG_ROOT)

#set(GLOG_ROOT_DIR "" CACHE PATH "Folder contains Google glog")

find_path(GLOG_INCLUDE_DIR glog/logging.h
PATHS
${GLOG_ROOT_DIR}
PATH_SUFFIXES
src)

find_library(GLOG_LIBRARY glog libglog
PATHS
${GLOG_ROOT_DIR}
PATH_SUFFIXES
.libs
lib
lib64)

find_package_handle_standard_args(GLOG DEFAULT_MSG
GLOG_INCLUDE_DIR GLOG_LIBRARY)

if(GLOG_FOUND)
set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
set(GLOG_LIBRARIES ${GLOG_LIBRARY})
message("GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIRS}===========")
message("GLOG_LIBRARY ${GLOG_LIBRARY}===========")
endif()

Главный CMakeLists.txt используйте выше FindGLog.cmake найти glog:

cmake_minimum_required(VERSION 3.5)
project(my_caffe)

set(CMAKE_CXX_STANDARD 11)

# find glog
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
find_package(GLog REQUIRED)

set(SOURCE_FILES main.cpp)
add_executable(my_caffe_test ${SOURCE_FILES})

# link glog
target_link_libraries(my_caffe_test
${GLOG_LIBRARIES}
)

цитируется из:https://davidstutz.de/running-google-glog-on-travis-ci/

0

По вопросам рекламы [email protected]