CPPPATH 似乎不适用于 scons?
CPPPATH doesn't seem to work with scons?
在阅读 scons 的手册页时,我的理解是,当 header 文件更改时,scons 并不总是意识到,cpp 源文件也应该更改。我做了一个实验,但只是发现,无论我们是否指定了 CPPPATH,似乎 scons 总是会检测 header 文件更改并应用相应源文件的重建。
例如,我有 o.c 文件和包含 n.h 文件的 headers/ 目录:
#include"headers/n.h"
#include<stdio.h>
int main(){
printf("hello\n");
return 2;
}
而我的scons SConstruct是这样的:
Program('o.c')
当我更改 n.h 的内容时,scons 将重建 o.c 文件。这让我很惊讶。我试图像这样更改 SConscript:
Program('o.c',CPPPATH='.')
This time, I hope scons will only check header files under ".", but not under ./headers. Still, scons will rebuild o.c
I moved headers/ to another place above "." directory, and changed o.c to include it with absolute path. When I change n.h, still scons will rebuild o.c
我的问题:
(1) scons 如何扫描并确定header 文件是否已更改,它是调用gcc front-end 还是预处理器来执行此操作?如果是的话,好像是和编译重复了对吧?
(2) 我发现指定 CPPPATH 没有用:无论是否指定,scons 都会扫描。即使我说 CPPPATH=".",scons 似乎也在扫描其他目录。
为什么?这是设计使然吗?如果是,那么 CPPPATH 的用途是什么?
再次强调(参见 Using 'LIBS' in scons 'Program' command failed to find static library, why? and When I change SConstruct file, scons doesn't trigger rebuild?)您的假设是错误的。
SCons 简单地模仿 CPPPATH
在 gcc/g++
编译器中的用法。在您上面的示例中,即使 gcc
也会找到 header n.h
,而 command-line 中没有明确的“-Iheaders
”。通过你的明确
#include"headers/n.h"
它拥有所需的所有信息(relative/absolute header 的完整路径)。让它成为
#include "n.h"
你会看到不同。
在阅读 scons 的手册页时,我的理解是,当 header 文件更改时,scons 并不总是意识到,cpp 源文件也应该更改。我做了一个实验,但只是发现,无论我们是否指定了 CPPPATH,似乎 scons 总是会检测 header 文件更改并应用相应源文件的重建。
例如,我有 o.c 文件和包含 n.h 文件的 headers/ 目录:
#include"headers/n.h"
#include<stdio.h>
int main(){
printf("hello\n");
return 2;
}
而我的scons SConstruct是这样的:
Program('o.c')
当我更改 n.h 的内容时,scons 将重建 o.c 文件。这让我很惊讶。我试图像这样更改 SConscript:
Program('o.c',CPPPATH='.')
This time, I hope scons will only check header files under ".", but not under ./headers. Still, scons will rebuild o.c
I moved headers/ to another place above "." directory, and changed o.c to include it with absolute path. When I change n.h, still scons will rebuild o.c
我的问题:
(1) scons 如何扫描并确定header 文件是否已更改,它是调用gcc front-end 还是预处理器来执行此操作?如果是的话,好像是和编译重复了对吧?
(2) 我发现指定 CPPPATH 没有用:无论是否指定,scons 都会扫描。即使我说 CPPPATH=".",scons 似乎也在扫描其他目录。
为什么?这是设计使然吗?如果是,那么 CPPPATH 的用途是什么?
再次强调(参见 Using 'LIBS' in scons 'Program' command failed to find static library, why? and When I change SConstruct file, scons doesn't trigger rebuild?)您的假设是错误的。
SCons 简单地模仿 CPPPATH
在 gcc/g++
编译器中的用法。在您上面的示例中,即使 gcc
也会找到 header n.h
,而 command-line 中没有明确的“-Iheaders
”。通过你的明确
#include"headers/n.h"
它拥有所需的所有信息(relative/absolute header 的完整路径)。让它成为
#include "n.h"
你会看到不同。