我想用 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 上一切正常(参见 CMakeLists.txt):一切正常。
要在 Linux 上构建glog
,我还需要配置.h.in
文件(以及其他工作)。CMakeconfigure_file
不起作用:我有.h
文件,但它们#undef
仅包含 's。但是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()
谢谢你的帮助