2016-04-26 2 views
0

私は 'Cn'と呼ばれる言語を使用するデジタル信号処理カードのコードを開発しています。これはCと非常に似ていますが、 'モノ'と 'ポリ'変数の導入のような重要な違いがあります。SConで非GNUコンパイラを使用するにはどうすればよいですか?

コンパイラは 'cscn'と呼ばれ、C:\ Program Files(x86)\ clearspeed \ bin \ cscn.exe(Windowsホストシステム)にあります。SConsの使用方法を調べています私のコンパイルと依存関係の生成を行うには、SConsがcscnコンパイラを認識/使用するようには思えません。非常に単純なコンパイルコマンドは、コンフィギュレーションスクリプトで

cscn pi.cn -lcn_reduction -o pi.csx 

私の最新の試みが

env = Environment() 
env.Replace(CC = ['C:\Program Files (x86)\clearspeed\bin\cscn.exe']) 
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction') 

私は何を得る、しかし、「ことのVisual Studioコンパイラのどのバージョンを私に言っていないエラーメッセージであるべきです私のビルドには少なくとも1つの.exeターゲットを指定する必要があります。 cscnは.exeファイルを作成せず、.csxファイルを作成します。私は、env.Replace()コマンドで使用しようとしているコンパイラを置き換えることができることを期待していましたが、明らかにそうではありません。

これを行う方法はありますか?

+0

あなたの質問とは無関係です:Python文字列でバックスラッシュを使用すると、結局あなたを噛んでしまいます。 '' C:/ Prog ... ''や' 'C:\\ Prog ...''や 'r'C:\ Prog ... ''が好きです。 –

答えて

1

代わり

env = Environment(CC = 'C:/Program Files (x86)/clearspeed/bin/cscn.exe') 
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction') 

を試してみてください。

env = Environment(tools=['default']) 

への単純なEnvironment()コールのデフォルトSConsは、最初gccまたはg++、同様に、そのツールを見つけようとすることを意味しています。後でパスを置き換えると遅くなります...対応するBuilderのようなProgramLibraryは、コンパイラが見つからないため、現在の環境では初期化されていません。 ツールチェイン全体が正しく機能するためには、他のいくつかの変数(ARLINKが念頭に置かれています)を置き換えなければならないことに注意してください。 How can I use a cross compiler with Scons?も参照してください。

この問題を解決するには、[email protected]http://scons.org/lists.htmlを参照)のユーザーメーリングリストにお越しください。

+0

私たちの答えはエーテルで...;) – bdbaddog

1

あなたはいくつかの変更を加える必要があるように見えます。 SCons/Tool/init.py

c_compilers = ['msvc', 'mingw', 'gcc', 'intelc', 'icl', 'icc', 'cc', 'bcc32' ] 

だから、最初のは、これを修正しましょう:

env = Environment(tools=[]) 
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('cc') 
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('link') 
env.Program('pi.csx', 'pi.cn', CFLAGS='-lcn_reduction') 

多分あなたは窓の上にあるので、それらが利用可能である場合に はまず、SConsはは

を参照してください、Visual Studioのツールの設定にデフォルト設定されますSConsは.csxと.cnファイルの接尾辞を知らないので、まだ十分ではありません。それでは、これを修正しましょう:

env = Environment(tools=[]) 
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('cc') 
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('link') 
env['PROGSUFFIX'] = '.csx' 
# Note we removed that from the output for program as it should automatically add it. 
env.Program('pi', 'pi.cn', CFLAGS='-lcn_reduction') 

次はあなたが.CN年代は、オブジェクトファイルを作ることができるSConsはを伝える必要があります。

import SCons.Tool 
import SCons.Default 
static_obj, shared_obj = SCons.Tool.createObjBuilders(env) 
my_suffix = '.cn' 
static_obj.add_action(my_suffix, SCons.Defaults.CAction) 
#shared_obj.add_action(my_suffix, SCons.Defaults.ShCAction) 
static_obj.add_emitter(my_suffix, SCons.Defaults.StaticObjectEmitter) 
#shared_obj.add_emitter(my_suffix, SCons.Defaults.SharedObjectEmitter) 

これは注意してください。

それでは、一緒にすべてを入れてみましょう:

env = Environment(tools=[]) 
env['CC'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('cc') 
env['LINK'] = 'C:\Program Files (x86)\clearspeed\bin\cscn.exe' 
env.Tool('link') 
env['PROGSUFFIX'] = '.csx' 

# Add .cn suffix as able to create objects. 
import SCons.Tool 
import SCons.Default 
static_obj, shared_obj = SCons.Tool.createObjBuilders(env) 
my_suffix = '.cn' 
static_obj.add_action(my_suffix, SCons.Defaults.CAction) 
#shared_obj.add_action(my_suffix, SCons.Defaults.ShCAction) 
static_obj.add_emitter(my_suffix, SCons.Defaults.StaticObjectEmitter) 
#shared_obj.add_emitter(my_suffix, SCons.Defaults.SharedObjectEmitter) 

# Note we removed that from the output for program as it should automatically add it. 
env.Program('pi', 'pi.cn', CFLAGS='-lcn_reduction') 

さて、私はあなたのコンパイラツールチェーンへのアクセス権を持っていないので、私は上記を試していませんでしたが、私はそれが最もあなたを取得する必要があります信じて、場合そこまでずっとではありません。

+0

@bdbaddogのこの巧妙なアプローチがうまくいくならば、私たちの[Tools for Fools Guide](https:// bitbucket)に記載されている適切な "clearspeed" (外部ツールのインデックス)(https://bitbucket.org/scons/scons/wiki/ToolsIndex)のために寄付してください... – dirkbaechle

+0

実際のツールはこれを行うにはもっとクリーンな方法。 :) – bdbaddog

関連する問題