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

如何在指定CMakeLists.txt中添加C++头文件?含代码正确性咨询

问题解答

现有CMakeLists.txt是否正确?

现有文件是正确的:它成功定义了systems库,添加了所需的源文件,通过add_subdirectory引入了surpass子项目,并将surpass库以PRIVATE方式链接到systems,逻辑上没有问题,只是尚未处理头文件。

如何添加C++头文件?

有两种常用方式,推荐使用现代CMake更推崇的target_sources:

方式1:使用target_sources(推荐)

如果你希望头文件作为库的公共接口(即其他依赖systems的目标需要包含这些头文件),就用PUBLIC限定符;如果头文件只是systems库内部使用,不需要暴露给外部,就用PRIVATE。

示例写法:

# 在add_library之后添加
target_sources(systems
  PUBLIC
    AtomTypes.h
    AtomTypingVariants.h
    BuildPolymerChain.h
    CartesianAtoms.h
    CartesianChains.h
    SimpleAtomTyping.h
  # 如果有仅内部使用的头文件,添加到PRIVATE下
  # PRIVATE
  #   InternalHeader1.h
)

方式2:直接添加到add_library中

也可以直接把所有头文件跟源文件一起列在add_library的参数里,这种写法更简洁,但灵活性不如target_sources:

add_library(systems
  AtomTypes.cc
  AtomTypes.h
  AtomTypingVariants.cc
  AtomTypingVariants.h
  BuildPolymerChain.cc
  BuildPolymerChain.h
  CartesianAtoms.cc
  CartesianAtoms.h
  CartesianChains.cc
  CartesianChains.h
  SimpleAtomTyping.cc
  SimpleAtomTyping.h
)

选择target_sources(PUBLIC)还是add_library?

  • 若你需要明确区分公共/私有头文件,或者后续可能需要动态调整目标的源文件属性,优先选target_sources带PUBLIC(或PRIVATE)的写法,这是现代CMake的最佳实践。
  • 若项目结构简单,头文件全部是公共接口,直接加到add_library里也完全可行,只是缺少属性区分的灵活性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:50:29