2012-03-02 4 views
2

私はRuby C Extensionを書いています。私はWindowsとOSXでコンパイルします。OSに応じてextconf.rbから生成される出力を制御する方法は?

私が解決できなかったことは、makefileと生成された残りのファイルが置かれる場所の制御です。

私のextconf.rbファイルには、OSに応じてmakefileを準備するための条件文があります。そのため、私は両方のファイルを使用します。

私はOSXの下でコンパイルすると、すべてが分離された状態に保たれるように、Windowsの下のwinフォルダの下にosxフォルダとsimilaryに置かれます。

これまで通り、すべてのファイルはソースコードと同じフォルダに生成されます。

(私はCとコンパイルアプリケーションに非常に緑と思います。申し訳ありませんが、私は何かを明らかに見逃している場合。)

私はその後、ファイルを移動するためのバッチを書くことができ、それが中に行うことができれば、私はそれがクリーナーを見つけます世代。

答えて

1

I mkfm.rbのソースを見て、現在のディレクトリを変更した場合、Makefileが現在のディレクトリであることがわかりました。

Dir.chdir(OUTPUT_PATH) 
create_makefile(EXTENSION_NAME, SOURCE_PATH) 

これは、OUTPUT_PATHにメークファイルを作成しました。あなたが見るように、Makefileがソースファイルと同じ場所になかったため、SOURCE_PATHcreate_makefileに提供して顔を説明しなければなりませんでした。

1

ルールの前に、メイクファイルに条件を入れることができます。以下のような何か:

OS := $(shell uname) 
ifeq ($(OS),Darwin) 
FOLDER := /some_path/osx_folder 
else 
FOLDER := /some_other_path/win_folder 
endif 

EDIT:
FOLDERは単なる変数です。それはそうと同じように、メイクファイルで後で使用されることになる。

$(FOLDER)/main: $(FOLDER)/main.o $(FOLDER)/foo.o 
    blah blah link $^ together to build [email protected] 

$(FOLDER)/%.o: $(SOURCE_DIRECTORY)/%.c 
    blah blah compile $< to build [email protected] 

(これはあなたがに対処するためのたくさんのファイルを持っている場合は、よりエレガントなソリューションが可能ですexample--、粗である。)

+0

これはどこに記載されていますか?私はextconf.rbの設定の概要を見つけるのに苦労してきました。 – thomthom

+0

@thomthom、http://en.wikipedia.org/wiki/UnameでUNIXの「uname」、条件をhttp://www.gnu.org/software/make/manual/make.html#Conditionalsで行いますRubyや 'extconf.rb'について知りません。 – Beta

+0

私は少しフォルダーの混乱している - それは特別な指示ですか?または、後でMAKEファイルでファイルの出力先を定義するために使用されるはずですか? – thomthom

関連する問題