我必须“释放”一些C ++代码。基本上这个代码需要编译一个C ++ 11编译器和一些外部库(特别是gmp,gsl,mpfr库)。
所以基本上要使用的makefile必须在使用之前正确配置(因为实际的结构取决于编译器的安装位置和其他库的位置)。
在使用带make命令的makefile之前,有没有办法“预配置”makefile?
答案 0 :(得分:0)
Autoconf和automake是重型工具,可以很好地完成你所描述的工作,但可能有一个更简单的解决方案。首先,请确保在适当的地方使用变量:
%.o:%.c
$(CC) $(CFLAGS) $^ -o $@
program: $(OBJS)
$(LD) $(LDFLAGS) ...
然后填充CC和LDFLAGS。您可以要求用户在命令行上覆盖它们,如下所示:
make CC=/opt/toolchains/xxx/yyy/gcc
请注意,即使您在makefile中定义CC
,您在命令行中指定的值也会优先。或者,您可以执行可编辑的配置文件,并在makefile中包含这样的行:
CONFIG_FILE := .configure
TOOLCHAIN_DIR := $(sed -n "s/^\s*TOOLCHAIN:\s*\(\S*\).*$$/\1/p" < $(CONFIG_FILE))
LIB_DIRS := $(sed -n "s/^\s*LIBS:\s*\(\S*\).*$$/\1/p" < $(CONFIG_FILE))
CC:=$(TOOLCHAIN_DIR)/gcc
LDFLAGS += $(addprefix -L,$(LIB_DIRS))
最重要的是,您可以在makefile中创建configure
规则,以根据用户输入生成.configure
文件。如果你需要超越它,你可能需要考虑autoconf。