scons生成错误包含构建中的路径指令

问题描述 投票:2回答:1

我使用简单,通用的目录设置构建了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中。

关于这个出错的地方的任何想法?

scons include-path
1个回答
4
投票

根据SCons手册http://scons.org/doc/HTML/scons-user/x3240.html,'#'相对于顶级SConstruct

当我重新创建您指定的树时,您在上面提供的脚本会成功构建。这是工作输出:

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.
© www.soinside.com 2019 - 2024. All rights reserved.