我使用简单,通用的目录设置构建了scons:
project/
SConstruct
src/
file.cpp
SConscript
include/
namespace/
header.h
在file.cpp中,我通过#include“namespace / header.h”包含header.h所以我想要做的只是将include目录添加到include路径列表中。从源(和SConscript)的角度来看,该路径是“../include”,但构建命令始终具有包含在其中的无效路径。我在SConscript中尝试了以下内容:
env.Append(CPPPATH = ["#include"])
env.Append(CPPPATH = [Dir("include")])
env.Append(CPPPATH = [os.getcwd() + 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脚本完全我已经拥有的设置(这是将“include”添加到CPPPATH中。
关于这个出错的地方的任何想法?
答案 0 :(得分: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.