2012-03-02 3 views
2

저는 Ruby C Extension을 쓰고 있습니다. Windows 및 OSX에서 컴파일 할 것입니다.OS에 따라 extconf.rb에서 생성 된 출력을 제어하는 ​​방법은 무엇입니까?

내가 해결할 수없는 것은 메이크 파일과 나머지 모든 생성 된 파일이 저장되는 위치입니다.

내 extconf.rb 파일에는 OS에 따라 메이크 파일을 준비하기위한 조건문이 있으므로 두 파일 모두에 하나씩 사용합니다.

OSX에서 컴파일 할 때 OSX에서 컴파일 할 때 모두 osx 폴더에두고 windows 아래 win 폴더 아래에 모든 파일을 분리하여 보관하고 싶습니다.

이제 모든 파일이 내 소스 코드와 동일한 폴더에 생성됩니다.

내가 나중에 파일을 이동 배치를 작성할 수 (나는 분명 뭔가를 놓친 경우 나.. 죄송 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 

편집 :
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에서 유닉스'uname', http://www.gnu.org/software/make/manual/make.html#Conditionals에서 조건부 작성, 제가하지 않습니다. Ruby 나'extconf.rb'에 대해서 안다. – Beta

+0

나는 약간의 FOLDER를 혼란스럽게 생각합니다 - 특별한 지시어입니까? 또는 나중에 MAKE 파일에서 파일이 출력되는 위치를 정의하는 데 사용됩니까? – thomthom

관련 문제