gpt4 book ai didi

c++ - CPPPATH 似乎不适用于 scons?

转载 作者:太空宇宙 更新时间:2023-11-04 09:22:59 25 4
gpt4 key购买 nike

在阅读 scons 的手册页时,我的理解是,scons 并不总是意识到头文件更改时,cpp 源文件也应该更改。我做了一个实验,但只是发现,无论我们是否指定了 CPPPATH,scons 似乎总是会检测头文件更改并应用相应源文件的重建。

例如,我有 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如何扫描判断头文件是否发生变化,是调用gcc前端还是预处理器来做?如果是这样,这似乎是与编译的重复工作,对吧?

(2) 我发现指定 CPPPATH 没有用:无论是否指定,scons 都会扫描。即使我说 CPPPATH=".",scons 似乎也在扫描其他目录。

为什么?这是设计使然吗?如果是,那么 CPPPATH 的用途是什么?

最佳答案

同样(参见 Using 'LIBS' in scons 'Program' command failed to find static library, why?When I change SConstruct file, scons doesn't trigger rebuild?)您的假设是错误的。

SCons 简单地模仿了CPPPATHgcc/g++ 编译器中的用法。在上面的示例中,即使是 gcc 也会在命令行中找到没有显式“-Iheaders”的标题 n.h。通过你的明确

#include"headers/n.h"

它具有所需的所有信息( header 的完整相对/绝对路径)。使之成为

#include "n.h"

你会看到不同。

关于c++ - CPPPATH 似乎不适用于 scons?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39856232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com