我想用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/
。好吧,我不知道如何使它工作。以及如何
在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。