这是我在Github上的项目:链接
这是我的SConstruct文件:
SConscript('main.scons', variant_dir = 'build', duplicate = 0)
这是我的main.scons文件:
import sys
import os
import fnmatch
def find_source_files(directory, ext = "cpp"):
matches = []
for root, dirnames, filenames in os.walk(directory):
for filename in fnmatch.filter(filenames, '*.' + ext):
matches.append(os.path.join(root, filename))
return matches
if __name__ == '__main__':
for f in find_source_files('src'):
print f
else:
Program(target = 'main.bin', source = find_source_files('src'))
这是我运行它时获得的结果:
bitcycle @ cypher ~/git/IeiuniumTela $ find $(pwd) -name "*.bin" -or -name "*.o" -exec rm {} \;; scons; find $(pwd) -name "*.bin" -or -name "*.o"
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
gcc -o build/main.bin
gcc: fatal error: no input files
compilation terminated.
scons: *** [build/main.bin] Error 4
scons: building terminated because of errors.
当我运行`python main.scons'来测试它时,以下是发生的事情:
bitcycle @ cypher ~/git/IeiuniumTela $ python main.scons
src/main.cpp
我很难理解为什么它找不到我的源文件。有什么建议或想法吗?
[更新] 从邮件列表中得到了一些好的指导后,我发现这对我来说“足够好了”。
/SConstruct: SConscript('src/main.scons', variant_dir = 'build', duplicate = 0)
/src/main.scons: Program(target = 'main.bin', source = Glob('*.cpp'))
请参见github存储库以获取完整的源树。为了完整起见,我还添加了一个空的构建目录到存储库中。我发现有趣的是:
a. 在这个构建工具的上下文中,SCons版本的Glob不是递归的,用于发现源代码。我希望有一个递归的发现选项。:(
b. 我需要将scons文件放在与源文件相同的目录中(这很烦人)。
c. 打印语句显然有效,但sys.stdout.write不行(来自python模块)。