【问题标题】:How to name my own executable in Makefile?如何在 Makefile 中命名我自己的可执行文件?
【发布时间】:2017-12-26 00:44:18
【问题描述】:

我创建了以下 Makefile,它可以工作。它生成一个名为“test_Makefile_my_libs”的可执行文件,它恰好是我的 Fortran 代码名称,没有后缀“.f90”。

FC = gfortran

FCFLAGS = -g -fbounds-check
FCFLAGS = -O2

FCFLAGS += -I/usr/include

LIBDIR = /homedir/myname/Libraries/
LIBS = $(LIBDIR)/libgfortran_f.a $(LIBDIR)/libmy.a

PROGRAMS = test_Makefile_my_libs

all: $(PROGRAMS)

%: %.o
        $(FC) $(FCFLAGS) -o $@ $^ $(LIBS)

%.o: %.f90
        $(FC) $(FCFLAGS) -c $<

.PHONY: clean veryclean

clean:
        rm -f *.o *.mod *.MOD

veryclean: clean
        rm -f *~ $(PROGRAMS)

但我需要一个独立于我的源代码名称的可执行文件名,例如“myjob.exe”。在不修改我的源代码名称的情况下,我应该如何在 Makefile 中进行适当的更改? (我尝试了很多不同的方法,但都没有奏效。)

【问题讨论】:

  • 我强烈建议您花几个小时阅读GNU make的文档。这将对您有用(不仅是今天)。另外,请尝试make -p 了解内置规则并利用它们。
  • PROGRAMS = test_Makefile_my_libs改成PROGRAMS = myjob.exe没用??
  • “我强烈建议您花几个小时来学习 RTFM”。这违背了网站 90% 内容的目的。此外,这个问题比看起来更深:使用显式规则很简单,但如果想使用隐式规则怎么办?

标签: makefile fortran gfortran


【解决方案1】:

添加规则:

myjob.exe: test_Makefile_my_libs.o
    $(FC) $(FCFLAGS) -o $@ $^ $(LIBS)

【讨论】:

  • 还需要将myjob.exe添加到PROGRAMS而不是test_Makefile_my_libs,使其成为all的目标
  • 非常感谢!这就像魔术一样。虽然我之前尝试过类似的方法,但显然未能正确获取所有细节。
  • @SteveBarnes:可以这样做,是的,如果 OP 想要它是默认目标。
  • 我希望有一个隐式规则方法(不涉及显式使用 shell 重命名)。这似乎将显式规则硬编码到链接中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 2010-12-09
  • 1970-01-01
  • 2022-11-24
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多