2011-10-31 55 views
2

我有使用簡單,常見的目錄設置一個scons的構建路徑的指令:scons的產生不正確包括在建

project/ 
    SConstruct 
    src/ 
     file.cpp 
     SConscript 
    include/ 
     namespace/ 
      header.h 

在file.cpp,包括我header.h通過的#include「命名空間/頭.h「所以我想要做的只是將include目錄添加到包含路徑列表中。從源碼(和SConscript)的角度來看,該路徑是「../ include」,但build命令總是包含一個無效路徑。我在SConscript中試過以下內容:

env.Append(CPPPATH = ["#include"]) 
env.Append(CPPPATH = [Dir("include")]) 
env.Append(CPPPATH = [os.getcmwd() + os.sep + ".." + os.sep + "include"]) 
env.Append(CPPPATH = ["../include"]) 
env.Append(CPPPATH = ["#../include"]) 

其中沒有一個看起來可行。前四項給出「-Iinclude」,而最後一項將include包含在項目上方的目錄級別!下面是完整的SConscript

env = Environment() 
import os 

target_name = "device" 

source_files = Split(""" 
file.cpp 
""") 

env.Append(CPPPATH = ["#include", os.environ.get("SYSTEMC_PATH"), 
    os.environ.get("SYSTEMC_TLM_PATH"), os.environ.get("BOOST_PATH")]) 

object_list = env.SharedObject(source = source_files) 
targetobj = env.SharedLibrary(target = target_name, source = object_list) 
Default(targetobj) 

而且SConstruct就是:

import sys 

SConscript('src/SConscript', variant_dir='Release-'+sys.platform, duplicate=0, exports={'MODE':'release'}) 
SConscript('src/SConscript', variant_dir='Debug-'+sys.platform, duplicate=0, exports={'MODE':'debug'}) 

,我從其中SConstruct所在的目錄(即頂級目錄)scons的。

我已經做了一些尋找和根據scons doco,#應該告訴scons從SConscript(這是src目錄)的當前目錄生成路徑 - 我假設這是SConstruct目錄的?此外,我看不出有關這個特定問題的任何問題(在本網站或通過谷歌),通常我只是打人要求scons腳本完全我已經得到的設置(這是添加「包含」到CPPPATH)。

任何想到這裏會出錯的想法?

TIA,

-J

回答

4

'#' 是相對於頂級SConstruct,按照利用Scons手動http://scons.org/doc/HTML/scons-user/x3240.html

您提供上述構建腳本成功,當我重新創建樹你指定。這裏的工作輸出:

scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 
g++ -o Release-cygwin/file.os -c -Iinclude src/file.cpp 
g++ -o Release-cygwin/device.dll -shared Release-cygwin/file.os 
g++ -o Debug-cygwin/file.os -c -Iinclude src/file.cpp 
g++ -o Debug-cygwin/device.dll -shared Debug-cygwin/file.os 
scons: done building targets. 
+1

謝謝TJD。你的回覆讓我回頭仔細看目錄結構,發現我有一個錯字......和原始文章中的相同的打字錯誤(我之前已經修復過),包含目錄是拼寫錯誤的「 unclude」。我的哎呀...我最近不斷收到這些問題,所以我的眼鏡處方時間得到檢查methinks! – greenbutterfly