我正在编写Ruby C扩展。我将在Windows和OSX下编译它。
我无法解决的问题是控制makefile和所有其他生成文件的放置位置。
我的extconf.rb文件根据操作系统获得了准备makefile的条件语句 - 所以我对它们都使用了一个。
我希望当我在OSX下编译时,它全部放在一个osx文件夹中,类似于Windows下的win文件夹,以便将它们全部分开。
现在,所有文件都是在与源代码相同的文件夹中生成的。
(我对C和编译应用程序非常环保。抱歉,如果我错过了一些明显的东西。)
之后我可以编写一个批处理来移动文件,但如果可以在生成期间完成,我会觉得它更干净。
答案 0 :(得分:1)
您可以在规则之前在makefile中放置条件。类似的东西:
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 $@
(这是一个粗略的例子 - 如果你有很多文件要处理,可能会有更优雅的解决方案。)
答案 1 :(得分:1)
我查看了mkfm.rb
的来源,发现如果您更改了当前目录,则Makefile
是当前目录。
Dir.chdir( OUTPUT_PATH )
create_makefile( EXTENSION_NAME, SOURCE_PATH )
在OUTPUT_PATH
中创建了makefile。如您所见,我必须向SOURCE_PATH
提供create_makefile
来说明Makefile
与源文件不在同一位置的面孔。