我正在编写 Ruby C 扩展。我将在 Windows 和 OSX 下编译它。
我一直无法解决的是控制 makefile 和所有其余生成文件的放置位置。
我的 extconf.rb 文件有根据操作系统准备 makefile 的条件语句 - 所以我对它们都使用一个。
我希望当我在 OSX 下编译时,它全部放置在 osx 文件夹中,并类似于 Windows 下的 win 文件夹中,以便将它们全部分开。
现在所有文件都生成在与我的源代码相同的文件夹中。
(我对 C 语言和编译应用程序非常陌生。如果我错过了一些明显的东西,我很抱歉。)
我可以编写一个批处理来随后移动文件,但我发现如果可以在生成期间完成它会更干净。
最佳答案
您可以在 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 $@
(这是一个粗略的示例 - 如果您有大量文件需要处理,则可以使用更优雅的解决方案。)
关于ruby - 如何根据操作系统控制 extconf.rb 生成的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533190/