Linux下使用CMake构建并安装Google glog遇阻求助
嘿,刚接触CMake的话,用ExternalProject_Add来管理glog确实是个不错的选择,我来一步步帮你理清楚后续的配置和命令~
第一步:完善你的ExternalProject配置
你写的ExternalProject_Add代码还不完整,我帮你补全关键参数,确保glog能正确构建并安装到指定目录,避免依赖问题:
cmake_minimum_required(VERSION 3.10) project(YourMainProject) # 引入ExternalProject模块,用来管理外部依赖 include(ExternalProject) # 配置glog的外部构建项目 ExternalProject_Add( glog_project GIT_REPOSITORY https://github.com/google/glog.git GIT_TAG v0.3.5 # 指定你要的版本 SOURCE_DIR "${CMAKE_BINARY_DIR}/glog-src" # glog源码存放目录 BINARY_DIR "${CMAKE_BINARY_DIR}/glog-build" # glog构建目录 INSTALL_DIR "${CMAKE_BINARY_DIR}/glog-install" # glog安装目录(源码外,不污染系统) # 传递给glog的CMake参数 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> # 指定glog的安装路径 -DWITH_GFLAGS=OFF # 如果不需要gflags依赖就加这个,减少额外依赖 -DBUILD_TESTING=OFF # 跳过测试构建,加快编译速度 BUILD_COMMAND make # 用make构建(Linux下默认) INSTALL_COMMAND make install # 安装到指定目录 UPDATE_DISCONNECTED ON # 避免每次构建都检查git更新,节省时间 )
第二步:在主项目中链接glog
配置完外部项目后,需要让CMake找到安装好的glog,然后链接到你的主项目目标:
# 找到刚刚安装的glog(指定路径避免找到系统自带的旧版本) find_package(glog REQUIRED PATHS "${CMAKE_BINARY_DIR}/glog-install" NO_DEFAULT_PATH ) # 假设你的主项目是一个可执行文件 add_executable(your_main_executable main.cpp) # 确保glog先构建完成,再编译主项目 add_dependencies(your_main_executable glog_project) # 链接glog库到主项目 target_link_libraries(your_main_executable PUBLIC glog::glog)
第三步:构建和运行的命令
假设你的主项目目录结构是这样的:
your_main_project/ ├── CMakeLists.txt # 上面写的配置文件 ├── main.cpp # 你的业务代码 └── build/ # 源码外构建目录(自己创建)
执行以下命令完成构建:
- 进入源码外构建目录:
cd your_main_project/build - 运行CMake生成构建文件:
cmake .. - 构建整个项目(会自动拉取glog源码、编译、安装,再编译你的主项目):
如果你想单独先构建glog,也可以直接运行:makemake glog_project - 运行你的主程序:
./your_main_executable
简单的测试代码示例
在main.cpp里写个glog的测试代码,验证是否正常工作:
#include <glog/logging.h> int main(int argc, char* argv[]) { // 初始化glog google::InitGoogleLogging(argv[0]); // 输出日志 LOG(INFO) << "这是一条普通信息日志"; LOG(WARNING) << "这是一条警告日志"; LOG(ERROR) << "这是一条错误日志"; // 关闭glog google::ShutdownGoogleLogging(); return 0; }
注意事项
- 确保你的系统安装了
git(用来拉取glog源码)和build-essential(Linux下的编译工具链)。 - 如果后续需要升级glog版本,只需要修改
GIT_TAG的值即可。 - 如果你需要gflags来增强glog的功能,把
-DWITH_GFLAGS=OFF改成-DWITH_GFLAGS=ON,不过这时候需要确保系统有gflags,或者也用ExternalProject来管理gflags。
内容的提问来源于stack exchange,提问作者Noel Bahdy
相关产品推荐
相关产品推荐

