如何设置scons系统包含路径

Mic*_*son 19 c++ scons

使用scons我可以轻松设置包含路径:

env.Append( CPPPATH=['foo'] )
Run Code Online (Sandbox Code Playgroud)

这传递了旗帜

-Ifoo
Run Code Online (Sandbox Code Playgroud)

到gcc

但是我正在尝试编译并启用了很多警告.特别是

env.Append( CPPFLAGS=['-Werror', '-Wall', '-Wextra'] )
Run Code Online (Sandbox Code Playgroud)

在某些提升中可怕的死亡包括...我可以通过添加boost包含到系统包含路径而不是包含路径来解决这个问题,因为gcc对待系统包含的方式不同.

所以我需要传递给gcc而不是-Ifoo

-isystem foo
Run Code Online (Sandbox Code Playgroud)

我想我可以用CPPFLAGS变量做到这一点,但是想知道scons中是否有更好的解决方案.

Ben*_*enG 12

在SCons中没有内置的方法来传递-isystem包含路径,主要是因为它非常符合编译器/平台.

将它放在CXXFLAGS中会起作用,但请注意,这将隐藏SCons的依赖扫描程序中的标题,该扫描程序仅查看CPPPATH.

如果您不希望这些标头发生变化,这可能就行了,但如果您使用构建结果缓存和/或隐式依赖缓存,则可能会导致奇怪的问题.


Gar*_*ryO 6

如果你这样做

  print env.Dump()
Run Code Online (Sandbox Code Playgroud)

你会看到_CPPINCFLAGS,你会看到CCCOM(或_CCCOMCOM)中使用的变量._CPPINCFLAGS通常如下所示:

  '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
Run Code Online (Sandbox Code Playgroud)

从这里你可以看到你如何添加一个"isystem"包含,如_CPPSYSTEMINCFLAGS或其他一些.只需定义自己的前缀,路径var名称(例如CPPSYSTEMPATH)和后缀,并使用上面的成语来连接前缀.然后将你的_CPPSYSTEMINCFLAGS附加到CCCOM或_CCCOMCOM,然后离开.

当然这是系统特定的,但您可以根据需要在编译器命令行中有条件地包含新变量.