繁体   English   中英

CPPPATH似乎不适用于scons吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM