【发布时间】: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/。
好的,我不知道如何让它工作.. 以及如何
- 指定安装目录
- 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()
感谢您的帮助
【问题讨论】:
-
在“最后一次尝试”中,我会尝试
INSTALL_COMMAND "${MAKE} install"),否则BUILD_COMMAND "${MAKE} install")。 -
@Antonio,这将给出错误:
No rule to make target 'install' -
我不知道它是否有帮助,但 ExternaProject_Add 有一个 new documentation