在阅读scons的手册页时,我的理解是,scons并不总是在头文件发生变化时才意识到,cpp源文件也应该改变。我做了一个实验,但只是为了找到,无论我们是否指定了CPPPATH,似乎scons总是会检测到头文件更改并应用重建相应的源文件。CPPPATH似乎不适用于scons?
举例来说,我已经有了OC文件和头文件/目录包含NH文件:
#include"headers/n.h"
#include<stdio.h>
int main(){
printf("hello\n");
return 2;
}
而且我scons的SConstruct是这样的:
Program('o.c')
当我改变NH内容,scons将重建oc文件。这对我来说很令人惊讶。我试图改变SConscript这样的:
Program('o.c',CPPPATH='.')
这一次,我希望scons的将只检查在头文件,而不是下./headers“”。不过,scons会重建o.c
我将标题/移动到“。”上方的另一个地方。目录,并将o.c更改为包含绝对路径。当我改变NH,仍然使用SCons将重建OC
我的问题:
(1)如何scons的扫描,并确定头文件发生了变化,它调用gcc的前端或预处理器要做到这一点?如果是这样,它似乎与编译重复,对吧?
(2)我没有发现指定CPPPATH有用:是否指定,scons将扫描。即使当我说CPPPATH =“。”,scons似乎扫描其他目录。
为什么?这是设计吗?如果是,那么CPPPATH的用法是什么?
请每个问题提出一个问题。 –
+1“仅限一个问题”...并且请停止声明“SCons似乎不工作”。你可以这么说:“SCons不像预期的那样行事。”但是这应该包括对文档的参考,并且最好是一个“最小工作示例”,以清楚地表明偏差。简单地说,SCons的行为与你期望的不同,然后问“为什么”这个问题,对其他用户可能不是很有帮助。 – dirkbaechle