这个 makefile 语法 %IDLINC% 是什么意思
What is the meaning of this makefile syntax %IDLINC%
我正在尝试为 IDL 构建一个库,但是我 运行 遇到了很多麻烦。我相信理解这行语法可以帮助我解决更大的问题。
据我所知。源代码是用 fortran 编写的(我认为?)。语法第一次出现的地方是:
FOPTIONS_SHARED_win64_mingw=-I%IDLINC% -fno-second-underscore -static
我相信这个 FOPTIONS 变量在共享库文件 (.dll) 的构建中发挥了作用。这条线是什么意思?特别是,%IDLINC% 到底是什么?(双百分号)我看到它在警告消息中出现了很多。
这里是 makefile 中使用 FOPTIONS 变量的 compile/link 代码的一小段:
all.help:
@more $(HELPDIR)/Help.all
all: all.$(OS).$(ENV)
all..:
echo "Missing OS and ENV variables"
all.linux32.intel32: all.build
all.linux32.gnu32: all.build
all.linux32.pgi32: all.build
all.linux64.intel32: all.build
all.linux64.intel64: all.build
all.linux64.gnu32: all.build
all.linux64.gnu64: all.build
all.linux64.pgi64: all.build
all.linux64.gfortran64: all.build
all.win32.cygwin32: all.build
all.win64.cygwin64: all.build
all.win32.mingw: all.build
all.win64.mingw: all.build
all.mach.gnu32: all.build
all.sunos.sparc32: all.build
all.sunos.sparc64: all.build
all.sunos.gnu32: all.build
all.sunos.gnu64: all.build
all.build: version.fortran ntime_max
@cd $(SOURCEDIR); \
cp wrappers_$(WRAPPER_$(OS)_$(ENV)).inc wrappers.inc;\
echo "Building non-sharable object \
onera_desp_lib_$(LIBNAME_$(OS)_$(ENV)).$(NONSHAREDEXT_$(OS))"; \
$(FC_$(OS)_$(ENV)) $(FOPTIONS_NONSHARED_$(OS)_$(ENV)) *.f;\
$(AR) $(AROPTIONS_$(OS)) liboneradesp_$(LIBNAME_$(OS)_$(ENV)).$(NONSHAREDEXT_$(OS)) *.o;\
$(RANLIB) liboneradesp_$(LIBNAME_$(OS)_$(ENV)).$(NONSHAREDEXT_$(OS));\
echo "non-sharable object built";\
echo "";\
echo "Building sharable object \
onera_desp_lib_$(LIBNAME_$(OS)_$(ENV)).$(SHAREDEXT_$(OS))"; \
$(FC_$(OS)_$(ENV)) $(FOPTIONS_SHARED_$(OS)_$(ENV)) $(PIC_$(OS)_$(ENV)) -o
onera_desp_lib_$(LIBNAME_$(OS)_$(ENV)).$(SHAREDEXT_$(OS)) \
*.f $(LDOPTIONS_$(OS)_$(ENV));\
echo "sharable object built";\
echo "";\
echo "Building sequence achieved";
任何帮助将不胜感激!我是 Makefile 的初学者。
%IDLINC%
不是 makefile 语法,它是 MS-DOS 语法。准确地说是变量替换。你在警告中看到这个的原因是因为 Make 在它自己的替换传递之后打印每个命令。然后它将命令传递给 shell (MS-DOS) 以进行实际执行,此时 IDLINC 被 shell.
替换
由于在 -I%IDLINC%
中以 -I
为前缀,我假设该变量是为了保存 IDL headers.
的路径
我正在尝试为 IDL 构建一个库,但是我 运行 遇到了很多麻烦。我相信理解这行语法可以帮助我解决更大的问题。
据我所知。源代码是用 fortran 编写的(我认为?)。语法第一次出现的地方是:
FOPTIONS_SHARED_win64_mingw=-I%IDLINC% -fno-second-underscore -static
我相信这个 FOPTIONS 变量在共享库文件 (.dll) 的构建中发挥了作用。这条线是什么意思?特别是,%IDLINC% 到底是什么?(双百分号)我看到它在警告消息中出现了很多。
这里是 makefile 中使用 FOPTIONS 变量的 compile/link 代码的一小段:
all.help:
@more $(HELPDIR)/Help.all
all: all.$(OS).$(ENV)
all..:
echo "Missing OS and ENV variables"
all.linux32.intel32: all.build
all.linux32.gnu32: all.build
all.linux32.pgi32: all.build
all.linux64.intel32: all.build
all.linux64.intel64: all.build
all.linux64.gnu32: all.build
all.linux64.gnu64: all.build
all.linux64.pgi64: all.build
all.linux64.gfortran64: all.build
all.win32.cygwin32: all.build
all.win64.cygwin64: all.build
all.win32.mingw: all.build
all.win64.mingw: all.build
all.mach.gnu32: all.build
all.sunos.sparc32: all.build
all.sunos.sparc64: all.build
all.sunos.gnu32: all.build
all.sunos.gnu64: all.build
all.build: version.fortran ntime_max
@cd $(SOURCEDIR); \
cp wrappers_$(WRAPPER_$(OS)_$(ENV)).inc wrappers.inc;\
echo "Building non-sharable object \
onera_desp_lib_$(LIBNAME_$(OS)_$(ENV)).$(NONSHAREDEXT_$(OS))"; \
$(FC_$(OS)_$(ENV)) $(FOPTIONS_NONSHARED_$(OS)_$(ENV)) *.f;\
$(AR) $(AROPTIONS_$(OS)) liboneradesp_$(LIBNAME_$(OS)_$(ENV)).$(NONSHAREDEXT_$(OS)) *.o;\
$(RANLIB) liboneradesp_$(LIBNAME_$(OS)_$(ENV)).$(NONSHAREDEXT_$(OS));\
echo "non-sharable object built";\
echo "";\
echo "Building sharable object \
onera_desp_lib_$(LIBNAME_$(OS)_$(ENV)).$(SHAREDEXT_$(OS))"; \
$(FC_$(OS)_$(ENV)) $(FOPTIONS_SHARED_$(OS)_$(ENV)) $(PIC_$(OS)_$(ENV)) -o
onera_desp_lib_$(LIBNAME_$(OS)_$(ENV)).$(SHAREDEXT_$(OS)) \
*.f $(LDOPTIONS_$(OS)_$(ENV));\
echo "sharable object built";\
echo "";\
echo "Building sequence achieved";
任何帮助将不胜感激!我是 Makefile 的初学者。
%IDLINC%
不是 makefile 语法,它是 MS-DOS 语法。准确地说是变量替换。你在警告中看到这个的原因是因为 Make 在它自己的替换传递之后打印每个命令。然后它将命令传递给 shell (MS-DOS) 以进行实际执行,此时 IDLINC 被 shell.
由于在 -I%IDLINC%
中以 -I
为前缀,我假设该变量是为了保存 IDL headers.