2016-10-04 82 views
0

在閱讀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

請每個問題提出一個問題。 –

+1

+1「僅限一個問題」...並且請停止聲明「SCons似乎不工作」。你可以這麼說:「SCons不像預期的那樣行事。」但是這應該包括對文檔的參考,並且最好是一個「最小工作示例」,以清楚地表明偏差。簡單地說,SCons的行爲與你期望的不同,然後問「爲什麼」這個問題,對其他用戶可能不是很有幫助。 – dirkbaechle

回答

2

再次(請參閱Using 'LIBS' in scons 'Program' command failed to find static library, why?When I change SConstruct file, scons doesn't trigger rebuild?)您的假設是錯誤的。

SCons只是模仿了CPPPATH的用法,就像編譯器中的gcc/g++一樣。在上面的示例中,即使gcc也會在命令行中找到沒有明確的「-Iheaders」的標頭n.h。通過你的明確的

#include"headers/n.h" 

它具有它需要的所有信息(標頭的完整相對/絕對路徑)。做一個

#include "n.h" 

你會看到一個區別。

相關問題