我有以下项目结构:
/prj
SConstruct
/src
/app
/lib1
/lib2
/...
' / PRJ / SRC / LIB1'结构:
/lib1
/src
/test
SConscript
' LIB1 / SConscript':
SConscript('test/test1/SConscript',
exports = 'env',
variant_dir = '#build/release/lib1/test',
duplicate = 0)
最后,'测试'目录:
/test
/common
helpers.cpp
/test1
SConscript
main.cpp
在&test; test / test1 / SConscript'来源指定为:
Sources = ['../common/helpers.cpp', 'main.cpp']
结果:
scons: *** [build/release/lib1/common/helpers.o]
Source `build/release/lib1/common/helpers.cpp' not found,
needed by target `build/release/lib1/common/helpers.o'
可以看出问题是scons试图找出源文件' helpers.cpp'在构建目录中,而不是在源代码目录中。
一些研究表明,当源文件路径以' ../'开头时引发的问题。当所有来源定义在' SConscript'文件全部没问题。
Scons v2.5.1和v3.0.1表现出相同的行为。
我做错了什么?我发现了this answer作者建议的地方:
你可以使用../test.cpp作为文件名
但我做的完全一样。是这样的scons行为还是这个bug?
答案 0 :(得分:0)
您的"代码"在" lib1/SConscript
":
SConscript('test/test1/SConscript',
exports = 'env',
variant_dir = '#build/release/lib1/test',
duplicate = 0)
使用给定" test/test1/SConscript
"的名称并隐式链接文件夹" test/test1
"作为"变体文件夹" (= variant_dir)到目标目录" #build/release/lib1/test
"。因此,如果无法在" #build/release/lib1/test
"中找到所需文件, SCons 会尝试进行替代"查找"在" test/test1/
"。但是,此链接不会自动设置为" common
"文件夹以及查找" helpers.cpp
"的原因。失败。这是预期的行为,并在 SCons 中正确。
解决当前问题的方法是移动" test/test1/SConscript
"一个文件夹级别更高,包括那里的来源" common/helpers.cpp
"和" test/main.cpp
"并从" lib1/SConscript
"中调用这个新的SConscript为:
SConscript('test/SConscript',
exports = 'env',
variant_dir = '#build/release/lib1/test',
duplicate = 0)