我想用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/

好吧,我不知道如何使它工作。以及如何
  • 指定安装目录
  • lib构建类型(静态/共享)
  • 配置类型(调试/发布)-不确定现在是否可以使用

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

    谢谢你的帮助

    最佳答案

    如今(大概会在glog版本0.3.5中出现),goji带有a CMakeLists.txt included,因此不再需要ExternalProject。

    07-27 13:18