make小tip
总所周知make一般需要Makefile才能编译相关源码,但也可以无需Makefile就能编译一些简单的源代码。
在算法竞赛里,一道题的源程序一般只有一个文件,此时用Makefile显得十分累赘,但如果输入一段长长的编译指令又很费时间
g++ a.cpp -o a
有时,为了使用新特性而要使用较新标准的C++标准,亦或者增加调试信息或者开Wall,此时应该输入
g++ a.cpp -std=c++17 -g -Wall -o a
显得十分的长且费时。幸运的是,make有个默认的编译配置,在MacOS中,我只要输入
make a
# make magically runs 'c++ a.cpp -o a'
它会默认调用c++编译器进行编译源码a.cpp,而无需我输入那一长串的编译命令。
但由于我想修改这个默认配置,也即采用C++ 17标准,增加其他的一些C++ flag(比如-g -Wall -Dqwq),或者增加静态库动态库链接,甚至修改编译器为g++。这些可以通过增加环境变量进行修改。
编辑~/.bash_profile(或者~/.bashrc, ~/.zshrc,取决于自己所用的终端),添加以下环境变量
export CC="gcc"
export CXX="g++"
export LDFLAGS="-L/opt/homebrew/opt/llvm/bin"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
export CXXFLAGS="-std=c++17 -g -Wall"
export CFLAGS="-std=c17 -g -Wall"
依此下来,
CC配置C编译器CXX配置C++编译器LDFLAGS配置动态链接库地址CPPFLAGS配置Flag,对C和C++都生效CXXFLAGS配置Flag,仅对C++生效CFLAGS配置Flag,仅对C生效
重新source下配置文件或者重启终端后,再次输入make a编译a.cpp就会得到
make a
# make runs 'g++ -std=c++17 -g -Wall -I/opt/homebrew/opt/llvm/include -L/opt/homebrew/opt/llvm/bin a`.cpp -o a'
如果是a.c则是
make a
# make runs 'gcc -std=c17 -g -Wall -I/opt/homebrew/opt/llvm/include -L/opt/homebrew/opt/llvm/bin a.c -o a'
这正是我们需要的,于是当用命令行编译单个文件时,我们仅需要输入make <sourceCode>就可以了!
以上方法适用于Linux和MacOS,Windows的话应该在系统环境变量里添加上述环境变量名和对应的值,重启下终端就可以了。
当然,配置的编译器gcc和g++也要确保在环境变量中,或者输入gcc或g++的绝对路径也可以。

浙公网安备 33010602011771号