scons 知道 SConscript 文件位于哪个目录吗?

2024-01-26

我们正在评估 scons 作为构建系统,但我在适应我们的旧系统时遇到了问题。在我们的一些源代码子目录中,我们有一个“sources.lib”文件,其中列出了需要编译以组装该目录的目标库的 C++ 文件的名称。但是,同一目录中还有其他 C++ 文件,因此我不能仅使用 Glob() 来查找合适的文件。

如何找出 SConscript 文件所在的目录? os.getcwd() 始终返回构建目录。尽管文档指出 SConscript 中的路径是相对于源目录的(否则 Glob('*.cpp') 将不起作用),但仅执行 open('sources.lib') 就会失败,因为它会查找构建目录中的文件。最后,该 SConscript 文件中的构建环境不包含实际的当前源目录。

Edit From 这个回复 https://stackoverflow.com/questions/6066545/scons-get-abspath-of-original-file-as-though-i-hadnt-set-variant-dir看起来像

File('sources.lib').srcnode().abspath

返回正确的文件名和目录,but它不会告诉您它是否存在(必须使用 os.path.isfile )。看来还

Dir('.').srcnode().abspath

会告诉您 SConstruct 文件所在的位置。

Example在定义要为库编译哪些源文件时,我不想使用

lib = env.SharedLibrary('mylib', Glob('*.cpp'))

而是宁愿构造一个函数,首先检查“sources.lib”是否存在,如果不存在,则使用通配符。所以我像这样定义我的图书馆

lib = env.SharedLibrary('mylib', env.getSources('*.cpp'))

并创建一个读取文件(如果存在)的函数


def getSources(self, pattern):

    # list of source files to assign to a target
    sources = []
    # srcFile = 'sources.lib' # failed
    # srcFile = os.path.join(os.getcwd(), 'sources.lib') # failed
    srcFile = File('sources.lib').srcnode().abspath # works

    # look for sources.lib
    try:
        infile = open(srcFile,'r')
    except IOError:
        #print "Globbing to get sources"
        sources = Glob(pattern, strings=True)
    else:
        #print "Reading sources.lib"
        for line in infile.readlines():
            line = line.rstrip('\n\r')
            if line != '':
                sources.append(line)

    return sources

buildEnv.AddMethod(getSources)  

这似乎有效。直到今天我才知道 File.srcnode().abspath 。


我使用以下代码:

this_sconscript_file = (lambda x:x).func_code.co_filename
code_base = os.path.dirname(this_sconscript_file)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scons 知道 SConscript 文件位于哪个目录吗? 的相关文章

  • 03 SCons 自动构建工具编译hello.c

    安装mingw 我的电脑已经安装过 xff0c 下面主要说下配置环境 我们将mingw的路径和scons的虚拟环境路径添加到临时的环境变量 这样做的好处是使用的时候添加 xff0c 不与其它版本的全局的环境变量冲突 后期我编译ARM程序时把
  • scons 实用说明(一)

    还在为写一个makefile发愁吗 还在为难记的make参数而苦恼吗 有了scons一切都边的简单了 最近研究了下scons 发现和makefile相比 soncs编译c和c 程序真的太方便了 搞程序什么做好 当然是简单实用最好下面大家就一
  • 斯康斯。使用 Glob 进行递归

    我使用 scons 几天了 有点困惑 为什么没有内置工具用于从给定根开始递归构建源 让我解释 我有这样的源码配置 src Core folder1 folder2 subfolder2 1 Std folder1 等等 这棵树可能更深 现在
  • 从 Repository() 编译的源代码未放入分层 SCons 项目的变体目录中

    我有一个分层项目 它使用公共系统目录中的源代码 为此我使用 SConsRepository 函数并希望将所有构建输出 本地代码和从存储库中获取的代码 放置在variant dir中 如果我使用Repository 在简单场景中运行函数 非分
  • 使用 Python subprocess.call() 启动 ncurses 进程

    我正在尝试致电 ct ng http crosstool ng org 来自 SCons SConstruct 脚本 所以基本上来自 Python 使用以下方法 ret subprocess call mnt build pw build
  • 使用 SCons 管理 Python 3 代码

    在工作中 我的任务是将 Python 2 7 代码的大型库转换为 Python 3 x 该库包含许多使用 boost python for C 制作的脚本和扩展 所有这些都是用 SCons 构建的 它不能与 Python 3 x 解释器一起
  • 如何根据编译器类型在 C 编译器的 SConstruct 中设置选项?

    我需要为 C 编译器设置附加选项 例如添加标志以打开所有警告 具体取决于编译器的类型 例如 对于 MSVC 我应该使用 env Append CPPFLAGS Wall 但对于 mingw gcc 我需要使用 env Append CCFL
  • COBOL 的 Scons

    我想在 scons 中创建一个与 COBOL 一起使用的构建器 这是一个开始 import re Import env Source src cpy COPYBK1 cpy src cpy COPYBK2 cpy src cpy COPYB
  • SCons:获取原始文件的绝对路径(就好像我没有设置variant_dir一样)

    我可以用File foo bar abspath获取文件的位置 但如果我设置了variant dir 则返回的路径将位于variant dir而不是原始位置 如果我有duplicate 0设置 那么返回的文件实际上并不存在 显然 SCons
  • 如何将 scons 指向安装在我的主目录中的不同编译器?

    我尝试编辑 SConstruct 以指向不同的 gcc 编译器 但它似乎总是使用 usr bin gcc 和 usr bin g 中定义的编译器 env DefaultEnvironment env CC home aaron devel
  • 如何测量 scons 构建的每个组件的构建时间?

    我有一个使用 scons 构建的大型 C 项目 它的构建速度很慢 我想进行一些更改以使其构建速度更快 现在我想集中时间加速构建中最慢的部分 如何找出哪些文件的编译时间最长 我知道这个问题很旧 并且已经被接受 但最近从另一个问题中引用了它 我
  • 如何让 SCons 替换已安装文本文件中的文本

    我希望能够在从 scons 安装一些 python 脚本时替换模板变量 SOFTWARE VERSION scons已经有这样的功能了吗 如果没有 那么挂钩 scons 安装过程的最佳方法是什么 以便我可以在安装过程中执行此操作 你可以使用
  • SCONS 运行目标

    我一直在寻找 寻找 但找不到我的问题的答案 我今晚刚刚开始学习 scons 看起来棒极了 不过我遇到了一点困惑 为了便于开发 我经常喜欢让我的 make 文件构建我的目标 然后运行它 以便我可以通过一次按键来测试更改 这在 make 文件中
  • 如何将交叉编译器与 Scons 一起使用?

    遵循建议关于斯康斯常见问题解答 http www scons org wiki FrequentlyAskedQuestions Why doesn 27t SCons find my compiler 2BAC8 linker 2BAC8
  • 告诉 SCons 不要自动创建目录?

    我正在尝试让 SCons 查看我需要的 git 存储库 并希望使该存储库保持最新 问题是我必须告诉它 git 存储库包含哪些文件才能在构建中使用它们 如果我这样做 SCons 将在尝试克隆存储库之前创建存储库 例如 假设我想克隆 GStre
  • SCons 长命令行 TEMPFILE 与 MinGW

    我正在尝试在 Windows 上使用 SCons 和 MinGW 从 gcc 和 gfortran 对象构建共享库 但在最终链接期间命令行太长 超过 18000 个字符 我知道我需要使用临时文件 响应文件 来传递命令行 但我找不到让 SCo
  • 无法运行 scons 并出现导入错误

    我已经安装了 scons 2 3 2 并安装了 python 2 4 当我运行 scons 时 我看到以下错误 scons Import failed Unable to find SCons files in usr bin engine
  • ant+cpptasks 与 scons 与 make

    我正在调查scons http www scons org 我只是想确保在我将大量脑细胞投入到完全不同的事物之前我知道替代方案是什么 我过去一直在使用 GNU make 但从来没有对它感到特别满意 特别是 为什么 Ant 没有更频繁地用于
  • 需要帮助调试缓慢的 scons 运行时

    我正在使用 scons 构建两个项目 一个项目效果很好 而另一个 更复杂 项目则非常令人沮丧 这是我在为第二个项目运行 scons 时看到的内容 S time scons scons Reading SConscript files lt
  • 如何使用 Visual Studio 命令行 + SCons 构建 Windows XP 应用程序?

    使用 Visual Studio 2015 IDE 构建 Windows XP 应用程序一点也不难 您只需要使用正确的平台工具集 v120 xp 或 v140 xp 并确保在目标计算机上安装正确的可再发行 Visual Studio 运行时

随机推荐