2

我正在编写一个 Ruby C 扩展。我将在 Windows 和 OSX 下编译它。

我一直无法解决的是控制生成文件和所有其他生成文件的放置位置。

我的 extconf.rb 文件有根据操作系统准备 makefile 的条件语句 - 所以我对它们都使用一个。

我希望当我在 OSX 下编译时,它都放在一个 osx 文件夹中,类似地放在 Windows 下的一个 win 文件夹下,以便将它们全部分开。

因为现在所有文件都生成在与我的源代码相同的文件夹中。

(我对 C 和编译应用程序非常熟悉。如果我遗漏了一些明显的东西,我很抱歉。)

之后我可以编写一个批处理来移动文件,但如果可以在生成期间完成,我会发现它更干净。

4

2 回答 2

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 回答
1

我查看了来源,mkfm.rb发现如果您更改了当前目录,Makefile则该目录就是当前目录。

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

这在OUTPUT_PATH. 如您所见,然后我必须提供SOURCE_PATH以说明与源文件不在同一位置create_makefile的面部。Makefile

于 2012-03-08T12:59:12.983 回答