2

Ruby C 拡張機能を作成しています。WindowsおよびOSXでコンパイルします。

私がうまくいかなかったのは、メイクファイルと残りのすべての生成されたファイルが配置される場所を制御することです。

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

OSX でコンパイルするときは、すべてを osx フォルダーに配置し、同様に Windows では win フォルダーの下に配置して、すべてを分離しておくようにしたいと思います。

現在、すべてのファイルはソースコードと同じフォルダーに生成されています。

(私は C とアプリケーションのコンパイルに非常に慣れています。何か明らかなことを見逃していたら申し訳ありません。)

後でファイルを移動するためのバッチを作成することもできますが、生成中に実行できた方がクリーンだと思います。

4

2 に答える 2

1

のソースを調べたところmkfm.rb、現在のディレクトリを変更すると、それが現在のディレクトリであることがわかりましたMakefile

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

これでmakefileが作成されましたOUTPUT_PATH。ご覧のとおり、顔がソース ファイルと同じ場所にないことを説明するために、 を提供SOURCE_PATHする必要がありました。create_makefileMakefile

于 2012-03-08T12:59:12.983 に答える
1

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

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

編集:
FOLDER単なる変数です。次のように、後で makefile で使用されます。

$(FOLDER)/main: $(FOLDER)/main.o $(FOLDER)/foo.o
    blah blah link $^ together to build $@

$(FOLDER)/%.o: $(SOURCE_DIRECTORY)/%.c
    blah blah compile $< to build $@

(これは大まかな例です。処理するファイルが多数ある場合は、より洗練されたソリューションが可能です。)

于 2012-03-02T16:46:08.713 に答える