これが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
ソースファイルが見つからない理由を理解するのに苦労しています。ここに提案やアイデアはありますか?
[UPDATE]メーリング リストから適切な指示を得た後、これで「十分」に機能することがわかりました。
/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. Print ステートメントは明らかに機能しますが、sys.stdout.write は機能しません (python モジュールから)。