【问题标题】:Building Google glog with CMake on Linux在 Linux 上使用 CMake 构建 Google glog
【发布时间】:2015-05-03 14:08:21
【问题描述】:

我想用 CMake 构建 Google glog 作为更大项目的一部分(解决方案,用 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)

在 Windows 上一切正常 (see CMakeLists.txt):一切正常。

要在 Linux 上构建 glog,我还需要配置 .h.in 文件(以及其他工作)。 CMake configure_file 不起作用:我有 .h 文件,但它们仅包含 #undef。但是glog./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. 配置类型(调试/发布) - 不确定现在是否有效

在 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()

感谢您的帮助

【问题讨论】:

  • 在“最后一次尝试”中,我会尝试INSTALL_COMMAND "${MAKE} install"),否则BUILD_COMMAND "${MAKE} install")
  • @Antonio,这将给出错误:No rule to make target 'install'
  • 我不知道它是否有帮助,但 ExternaProject_Add 有一个 new documentation

标签: c++ linux cmake glog


【解决方案1】:

我将通过示例向您展示,以下是我的项目结构:

cmake目录下的文件FindGLog.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/

【讨论】:

    【解决方案2】:

    现在(大概会在 glog 0.3.5 版中),有 glog 的 a CMakeLists.txt included,所以不再需要 ExternalProject。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 2013-11-14
      • 2022-08-24
      • 2022-08-14
      • 1970-01-01
      • 2021-10-06
      相关资源
      最近更新 更多