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

CMake中add_executable为何不编译指定的头文件?

为什么CMake中add_executable指定头文件不会被编译?

CMake判断一个文件是否需要被编译成目标文件,核心依据是文件的扩展名,而非是否被其他源文件#include。

  • CMake内置了一套文件扩展名与编译规则的映射:

    • 像.cpp、.c、.cxx这类源文件扩展名,会被识别为需要编译的文件,触发对应的编译器命令(比如g++ -c xxx.cpp -o xxx.o)。
    • 而.h、.hh、.hpp、.hxx这类头文件扩展名,CMake默认不会将其视为需要单独编译的源文件,自然不会生成对应的编译命令。
  • 官方允许甚至建议在add_executable/add_library里指定头文件的原因:
    主要是为了让头文件能被IDE(比如CLion、VS)识别,在项目视图里正常显示;同时打包发布项目时,头文件也会被包含到目标输出中,方便后续的开发或分发。

举你提到的例子:

add_executable(myprogram myprogram.cpp myprogram.hpp)

CMake只会对myprogram.cpp生成编译命令,myprogram.hpp因为扩展名是.hpp,会被跳过编译步骤,不会出现g++ -c myprogram.hpp -o myprogram.hpp.o这样的命令。

补充:如果强行修改CMake规则让头文件被编译,反而会引发错误——因为头文件本身是为了被#include到源文件中,单独编译会因为缺少主函数、重复定义等问题失败。

内容的提问来源于stack exchange,提问作者DBear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:38:08