You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/          # 源码外构建目录(自己创建)

执行以下命令完成构建:

  1. 进入源码外构建目录:
    cd your_main_project/build
    
  2. 运行CMake生成构建文件:
    cmake ..
    
  3. 构建整个项目(会自动拉取glog源码、编译、安装,再编译你的主项目):
    make
    
    如果你想单独先构建glog,也可以直接运行:
    make glog_project
    
  4. 运行你的主程序:
    ./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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:12:07