gri*_*sha 5 c++ linux cmake glog
我想用 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
Run Code Online (Sandbox Code Playgroud)
将在Debug配置中构建解决方案并将文件安装到xxx文件夹。
好的,glog是主要解决方案的子项目:
add_subdirectory(third_party/glog_0.3.4)
Run Code Online (Sandbox Code Playgroud)
在 Windows 上一切正常(请参阅 CMakeLists.txt):一切都按预期工作。
要glog在 Linux 上构建,我还需要配置.h.in文件(以及其他工作)。CMakeconfigure_file不起作用:我有.h文件,但它们#undef只包含's。但是glog's./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()
Run Code Online (Sandbox Code Playgroud)
并且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.
Run Code Online (Sandbox Code Playgroud)
如果我调用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()
Run Code Online (Sandbox Code Playgroud)
不会将文件安装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()
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助