CMake编译未用find_package(glog)仍可运行的原因探究
为什么没加
find_package(glog)也能成功编译运行? 问题描述
我在项目中使用glog,按照google/glog官方文档规则设计了一套日志系统,编写的CMakeLists.txt如下:
cmake_minimum_required(VERSION 3.0.2) project(glog_system) add_compile_options(-std=c++11) add_executable(glog_example example/example1.cpp example/g_logger.cpp ) target_include_directories(glog_example PUBLIC example ) target_link_libraries(glog_example glog stdc++fs )
令我困惑的是,即便没有在CMakeLists.txt中添加find_package(glog),依然能成功构建日志系统并运行可执行文件,想知道这背后的原因,求相关提示。
更新:项目目录结构
- build/ - example/ - example1.cpp - g_logger.cpp - g_logger.h CMakeLists.txt
可能的原因
- glog已被安装到系统标准路径(如
/usr/include、/usr/lib):CMake链接阶段会默认搜索系统标准库路径,编译器也会自动查找标准路径下的头文件,因此直接在target_link_libraries中指定glog就能找到对应的库文件,编译时也能找到头文件。 - 环境中已存在全局的glog配置:可能你之前通过其他项目、系统包管理器(如apt、yum)安装glog时,已经自动配置了CMake的全局变量或系统库搜索路径,使得CMake无需显式调用
find_package就能定位到glog。 - 编译器本身能找到glog:如果glog是通过系统包管理器安装的,系统会自动将其头文件和库路径加入到编译器的默认搜索列表中,CMake只是调用编译器完成编译链接,因此不需要额外的
find_package配置。
内容的提问来源于stack exchange,提问作者RyanChen.YLC
相关产品推荐
相关产品推荐

