Как контролировать вывод, сгенерированный из extconf.rb в зависимости от ОС? - PullRequest
2 голосов
/ 02 марта 2012

Я пишу расширение Ruby C. Я буду компилировать его под Windows и OSX.

То, что мне не удалось выяснить, - это контроль размещения make-файла и всех остальных сгенерированных файлов.

Мой файл extconf.rb получил условные операторы для подготовки make-файла в зависимости от ОС - поэтому я использую один для них обоих.

Мне бы хотелось, чтобы при компиляции под OSX все это помещалось в папку osx и аналогично в папку win под Windows, чтобы все это было разделено.

Как сейчас, все файлы создаются в той же папке, что и мой исходный код.

(Я очень зеленый для C и собираю приложения. Извините, если я пропустил что-то очевидное.)

Я мог бы написать пакет, чтобы потом переместить файлы, но я нахожу чище, если бы это можно было сделать во время генерации.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Я посмотрел на источник mkfm.rb и обнаружил, что если вы изменили текущий каталог, Makefile будет текущим.

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

Это создало make-файл в OUTPUT_PATH. Как вы видите, мне пришлось предоставить от SOURCE_PATH до create_makefile для учета лица, которое Makefile не было в том же месте, что и исходные файлы.

1 голос
/ 02 марта 2012

Вы можете поместить условие в make-файл перед правилами.Что-то вроде:

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

РЕДАКТИРОВАТЬ:
FOLDER это просто переменная;он будет использоваться позже в make-файле, например:

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

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

(это грубый пример - более элегантные решения возможны, если у вас много файлов для работы.)

...