如何在指定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
相关产品推荐
相关产品推荐

