[英]CPPPATH doesn't seem to work with scons?
在阅读scons的手册页时,我的理解是,当头文件更改时,scons并不总是意识到,cpp源文件也应更改。 我做了一个实验,但是只是发现,无论是否指定了CPPPATH,似乎cons总是会检测头文件的更改并应用相应源文件的重建。
例如,我有oc文件和包含nh文件的headers /目录:
#include"headers/n.h"
#include<stdio.h>
int main(){
printf("hello\n");
return 2;
}
我的骗局SConstruct是这样的:
Program('o.c')
当我更改nh的内容时,scons将重建oc文件。 这让我感到非常惊讶。 我试图像这样更改SConscript:
Program('o.c',CPPPATH='.')
这次,我希望scons仅检查“。”下的头文件,而不检查./header下的头文件。 不过,scons将重建oc
我将标题/移动到了“。”上方的另一个位置。 目录,并将oc更改为包含绝对路径。 当我更改nh时,scons仍会重建oc
我的问题:
(1)scons如何扫描并确定头文件是否已更改,它是调用gcc前端还是预处理器来执行此操作? 如果是这样,它似乎可以与编译重复进行,对吗?
(2)我发现指定CPPPATH并不是有用的:无论是否指定,scons都会扫描。 即使我说CPPPATH =“。”,scons似乎也会扫描其他目录。
为什么? 这是设计使然吗? 如果是,那么CPPPATH的用途是什么?
再次出现(请参见在scons中使用“ LIBS”,“ Program”命令无法找到静态库,为什么?并且当我更改SConstruct文件时,scons不会触发重建吗? )您的假设是错误的。
SCons只是像在gcc/g++
编译器中一样模仿CPPPATH
的用法。 在上面的示例中,即使gcc
也会在命令行中找到标头nh
而没有显式的“ -Iheaders
”。 由你明确
#include"headers/n.h"
它具有所需的所有信息(标头的完整相对/绝对路径)。 使那个
#include "n.h"
您会发现有所不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.