- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用库的 Fortran 上编写程序。对于编译,我使用我的简单 shell 脚本,一切都很好:
gfortran -c mod_input.f90 mod_cpp.f90 mod_data.f90 main.f90 b_coils.f
gfortran -o main mod_input.o mod_cpp.o mod_data.o main.o b_coils.o libspline.a -lstdc++
(libspline.a - 用 C++ 编写的库)
现在我想用makefile代替shell脚本,但是不知道怎么写才好。
生成文件:
target = main
srcdir = src/
objdir = obj/
targetdir = run/
FORT = gfortran
mflag = module
FORTFLAGS =
LDFLAGS = -lstdc++
MKLPATH =/home/gatto/Desktop/ray_u3/src
LIBDIR =-L$(MKLPATH)
LIBS = -lspline
MODDIR = obj/
# Ray sources
sources = mod_input.f90 mod_cpp.f90 mod_data.f90 main.f90 b_coils.f
# objects
objects = $(patsubst %.for,%.o,$(filter %for,$(sources)) )
objects += $(patsubst %.f90,%.o,$(filter %f90,$(sources)) )
# main target
build:$(targetdir)$(target)
# build rules
$(targetdir)$(target):$(addprefix $(objdir),$(objects))
@echo === build $@ ===
$(FORT) $(FORTFLAGS) $(LDFLAGS) $(LIBDIR) -o $@ $(LIBS) $^
#compilation target
compile :$(addprefix $(objdir),$(objects))
# compilation rules
$(objdir)%.o : $(srcdir)%.f90
@echo === compile $< ===
$(FORT) -c $(objdir) $(FORTFLAGS) -o $@ $<
$(objdir)%.o : $(srcdir)%.f
@echo === compile $< ===
$(FORT) -c $(objdir) $(FORTFLAGS) -o $@ $<
# cleaning rules
cleanobj:
-rm $(objdir)*.o $(objdir)*.mod
cleantarget:
-rm $(targetdir)$(target)
cleanall:cleanobj cleantarget
.PHONY: compile build cleanall cleanobj cleantarget
输出:
gfortran -lstdc++ -L/home/gatto/Desktop/ray_u3/src -o run/main -lspline obj/mod_input.o obj/mod_cpp.o obj/mod_data.o obj/main.o
obj/mod_data.o: In function `__global_data_MOD_modbfield':
mod_data.f90:(.text+0x3e2): undefined reference to `gbcoil_'
obj/mod_data.o: In function `__global_data_MOD_moddensity':
mod_data.f90:(.text+0x5d4): undefined reference to `GetSplineValue'
mod_data.f90:(.text+0x64f): undefined reference to `GetSplineValue'
mod_data.f90:(.text+0x6ca): undefined reference to `GetSplineValue'
mod_data.f90:(.text+0x745): undefined reference to `GetSplineValue'
obj/mod_data.o: In function `__global_data_MOD_inpfile':
mod_data.f90:(.text+0xa66): undefined reference to `Approx_input'
mod_data.f90:(.text+0xa75): undefined reference to `SetSpline'
collect2: error: ld returned 1 exit status
make: *** [run/main] Error 1
最佳答案
我建议您使用automake
(和autoconf
)。它确实有大量的 metatag
,但是对于简单的程序来说,它的编写速度更快,而且在大多数情况下,您可能会发现自己只需进行最小的更改(例如 filename
)。
这是我的 autoconf
和 automake
对类似项目的输入,它只使用 lapack
,而不是 mkl
.
configure.ac
#AC_PREREQ(2.69)
AC_INIT([src], [0.1],
[],
[mftc],
[])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([1.9.6 dist-bzip2 subdir-objects foreign])
AC_SEARCH_LIBS([dsyev_], [lapack], ,AC_MSG_ERROR([No LAPACK library]))
AC_OPENMP
FCFLAGS="$OPENMP_FFLAGS "
AC_PROG_FC([gfortran, ifort])
AC_CHECK_PROG([DEPF90_CHECK],[makedepf90],[yes],[no])
AM_CONDITIONAL([FOUND_MAKEDEPF90], [test "x$DEPF90_CHECK" = xyes])
AC_CONFIG_FILES([
Makefile
])
AC_OUTPUT
Makefile.am
bin_PROGRAMS = mftc
mftc_SOURCES = src/mftc.f90 src/parse.f90 src/sort.f90
depend depend.mk:
makedepf90 $(mftc_SOURCES) >depend.mk
@am__include@ @am__quote@depend.mk@am__quote@
mftc_LDADD =
EXTRA_DIST=depend.mk autogen.sh Makefile.am
CLEANFILES =*.mod *.log
depend depend.mk
依赖于makedepf90
程序,该程序在大多数linux 平台上都可用。该程序负责处理依赖项(即模块在程序之前首先编译)。
用法如果您对 LAPACK 没问题,我看不到您在 configure.ac 中需要更改的任何内容。更改 _SOURCES 行以获得正确的文件名。 现在,它在终端中的 3 命令:
$autoconf
$./configure
$make
当然,你还需要安装automake和autoconf。
希望对你有帮助
关于c++ - gfortran makefile 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203429/
我正在为一个私有(private)项目编译库,这取决于许多库。具体来说,其中一个依赖项是用 Fortran 编译的。在某些情况下,我看到使用 g77 编译的依赖项,在其他人身上,我看到它是用 gfor
根据 this , gfortran 可以进行整数逻辑转换,但我收到此错误: if (.not.bDropped.and.(zz_unif01() .lt. (1
我听说 g95 不再有效。现在使用哪种编译器是合适的(我将不胜感激提供最新的概述) 最佳答案 截至 2010 年 12 月 29 日,该项目似乎已死。自 2010 年 8 月中旬以来,该项目的博客没有
我有一个针对 ifort 进行了优化的程序,但是我想改用 gfortran 编译它。以下是提供的标志: FCFLAGS= -Vaxlib -CB -mcmodel=large -O -openmp
我正在尝试使用 gfortran 编译器在 Ubuntu 14.04 上使用旧的 CPMD-3.11.1 版本。 在运行 Makefile 时我遇到了这个错误: Error: Unclassifiab
我目前有 Xcode(以及命令行工具)和 gfrotran from HPC安装在我的 Yosemite 系统上,并希望将 HPC 的 gfortran 替换为 Homebrew 的(因为我在使用 H
自升级到优胜美地后,我无法使用 gfortran 进行编译。最初我收到“段错误 11”,然后我: 从 http://hpc.sourceforge.net/ 更新到 gcc v.5.0 重新安装了 X
我做了这个小程序来测试,如果gfortran做尾调用消除: program tailrec implicit none print *, tailrecsum(5, 0) contains recur
我使用的是 ubuntu 12.04,gcc/g++ 4.8,gfortran 是 4.6,我重新安装了 gfortran-4.8 和 gfortran-4.8.dev,仍然没有链接。 当我尝试编译一
有没有办法格式化输出的实数,以便宽度和小数部分都未指定?只需执行以下操作,ifort 就可以做到这一点: write (*, '(F)') num ...但我知道这种用法是特定于编译器的扩展。 Gfo
我需要调试一些 pure用 gfortran 编译的程序中的函数。有什么办法可以忽略 pure声明以便我可以使用 write , print等在这些pure功能不费力? 不幸的是,要删除 pure
是否存在与 C“inline”关键字等效的 Fortran 关键字? 如果存在一些特定于编译器的关键字,gfortran 是否有? 最佳答案 一般来说,Fortran 规范为编译器编写者提供了如何实现
请参阅下面的示例 program test character(10),dimension(5):: models = (/"feddes.swp", "jarvis89.swp", "jarvi
有没有办法强制 gfortran 中的下溢清零? 我不敢相信这是第一次有人问这个问题,但我在任何地方都找不到任何相关内容。如果这是重复的,我很抱歉。 最佳答案 您可以使用支持 Fortran 2003
我在将程序链接到库时遇到问题。我以前从未这样做过,所以我可能做了一些愚蠢的事情,但据我所知,我正在做正确的事情。我需要将程序 foo.f90 链接到库 libbar.a,该库位于我的主目录下其他位置的
使用 gfortran 编译时是否可以使用实数作为迭代器和数组索引?这是一些示例代码: program test real i real testarray(5) testar
我需要一点帮助:根据this site ,最大连续行数有限制。 所以我决定对此进行测试。我编写了一个巨大的 FUNCTION ,它计算在分成 17,146 个连续行的语句中表达的巨大代数公式。 !te
考虑以下代码: subroutine tao_show_this () implicit none type b_struct integer, pointer :: good_user => n
我正在尝试使用 mac-ports (OS-X) 中的 Gfortran 4.7 编译以下简单代码: program main implicit none integer :: n = 1, cloc
我用 Fortran90 编写了一个简单的程序来计算三角形的面积。用户输入三角形的三边,然后程序输出面积。足够简单。 MODULE Triangle_Operations IMPLICIT N
我是一名优秀的程序员,十分优秀!