【问题标题】:scons generating incorrect include path directive in buildscons 在构建中生成不正确的包含路径指令
【发布时间】:2011-10-31 12:08:13
【问题描述】:

我有一个使用简单通用目录设置的 scons 构建:

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

在 file.cpp 中,我通过 #include "namespace/header.h" 包含 header.h,所以我想要做的只是将包含目录添加到包含路径列表中。从源(和 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”,而最后一个将包含放在项目上方的目录级别!这是完整的 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)。

你有什么想法吗?

【问题讨论】:

    标签: scons include-path


    【解决方案1】:

    '#' 相对于顶级 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.
    

    【讨论】:

    • 感谢 TJD。您的回复让我回去仔细查看目录结构,发现我有一个错字......我在原始帖子中的错字(我之前修复了!),包含目录拼写错误“排除”。哎呀...我最近一直遇到这些问题,所以我想是时候检查我的眼镜处方了!
    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多