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

如何在CMake中对同一路径同时使用-isystem与-I参数?

解决CMake中同一路径同时使用-I和-isystem的问题

你遇到的问题其实是CMake的默认行为导致的:target_include_directories会自动对相同的包含路径去重,而且当你用SYSTEM标记某个路径后,后续对同一路径的普通设置会被覆盖,所以两次调用后最终只会保留-isystem pathA。要实现同时添加-IpathA和-isystem pathA,得绕过CMake的路径管理逻辑,直接手动指定编译选项。

具体做法

不用target_include_directories,改用target_compile_options直接传入两个编译标志:

add_library(lib SHARED libSource.cpp)
# 直接添加两个编译选项,绕过CMake的路径去重
target_compile_options(lib PRIVATE
    -IpathA
    -isystem pathA
)

原理说明

target_compile_options不会对传入的参数做去重或优先级调整,它会原封不动地把这些标志传递给编译器,这样就能同时得到你需要的-IpathA和-isystem pathA两个构建参数。

额外提示

  • 如果你需要让这些编译标志被依赖当前库的其他目标继承,把PRIVATE替换成PUBLIC或INTERFACE(根据你的项目依赖关系选择)。
  • 为了避免路径解析问题,推荐使用绝对路径,比如${CMAKE_CURRENT_SOURCE_DIR}/pathA来替代相对路径pathA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:03:12