贡献者: addis
make
命令是可以选择使用多线程,例如 make -j4
使用 4 线程。也可以 make -j`getconf _NPROCESSORS_ONLN`
自动设置为 cpu 的数量。
make -f 文件
:
后面的文件会按照顺序更新,而且只会更新一次,若以如果更新第二个文件的时候第一个文件被删掉也不会出错。
:
后面可以有 phony target,比如说 make clean
中的 clean
$(var)
和 ${var}
是完全等效的,在双引号内也可以替换。
ifeq ($(var1), true)
var2 = false
else ifneq($(var2), abc)
...
endif
$(info 显示 一些 文字)
会在 make 的时候显示文字到命令行。
Makefile
包含的所有 target,直接在命令行用 make
,空格,然后按两次 tab 自动补全即可。
rm
命令后面记得加 -f
选项,否则如果文件不存在就会出错导致 make 就会失败
goal: file1 file2 ...
command1
command2
.f90.o:
gfortran -c $<
其中 $<
是 auto variable 中的一个(见 10.5.3 Automatic Variables),在执行的时候被替换成 :
右边的第一个 dependency。现在如果有
file1.o: file1.f90 file2.o file3.o
那么应该会执行 gfortran -c file1.f90
。另外,如果 “file2.o” 或 “file3.o” 被更新了,这条命令应该也会再执行一次。
$^
列出所有的 prerequisites (“:” 右边的内容)
$(shell ...)
可以执行 shell 命令,如 $(shell echo *.f90)
可以在当前位置列出所有 “.f90” 文件。
$@
大概就是 target file(如果 “:” 左边只有一个文件的话)
source 脚本
会出错,因为默认 shell 是 /bin/sh
。可以用 . 脚本
等效替代。也可以用 SHELL := /bin/bash
。但注意这也并不能改变外部的环境变量,因为 rule 中的命令本身就是在一个新的 shell 中运行的。
: 要显示的内容
可以在命令行显示内容。其中 : 命令
不做任何事情。
make VAR1=... VAR2=...
可以设置参数(等号两边不能有空格!),相当于在 Makefile
里面使用 VAR1=... VAR2=...
,如果 Makefile
里面已经设置了这些参数(默认值),那么则会覆盖。
@
就可以不在 std 输出命令的内容。例如 @printf "一些信息"
--no-builtin-variables
关闭。
CC
是 C 编译器,CXX
是 C++ 编译器
CFLAGS
是 C 编译器的选项,CXXFLAGS
是 C++ 编译器的选项,FFLAGS
是 Fortran 编译器选项。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利