如何更改在Makefile中自动生成的命令的默认参数
how to change default parameter of commands that generate automatically in Makefile
假设项目中只有三个文件:a.h a.p p main.cpp。我用的是ubuntu 14.04
Makefile:
CFLAG=-Wall
CC=clang
m:main.o a.o
${CC} ${CFLAG} -o $@ $^
a.o:a.h
main.o:a.h
问题是当编译a.o时,它会生成这样的命令:
g++ -c -o a.o a.cpp
但我期望的是:
clang -Wall -c -o a.o a.cpp
除了像这样重写Makefile之外,还有其他的想法吗?
a.o:a.cpp a.h
${CC} ${CFLAG} -o $@ a.cpp
main.o:a.h main.cpp
${CC} ${CFLAG} -o $@ main.cpp
在GNU Make手册中,按照约定保存c++编译器的变量是CXX
而不是CC
。CC
为C编译器
所以加上一行:
CXX=clang
应该能解决你的问题。
然后我会将CC
的使用重构为CXX
,以保持一致和常规。
使用Makefile:
CXXFLAGS=-Wall
CXX=clang
m:main.o a.o
${CXX} ${CXXSFLAGS} -o $@ $^
a.o:a.h
main.o:a.h
调用make会得到:
$ make
clang -Wall -c -o main.o main.cpp
clang -Wall -c -o a.o a.cpp
clang -o m main.o a.o
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 使用QProcess执行命令,并将结果存储在QStringList中
- 数组长度,为什么从命令行获取时不能使用它?
- 具有默认值的引用获取函数
- 具有默认模板类型的默认构造函数的类型推导
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 在变量上显示默认文本,用户可以在C++命令行程序上编辑这些变量
- 使用 CMake 交叉编译:如何排除默认 qt 库,而不是将它们传递给链接器的命令行
- 如何更改在Makefile中自动生成的命令的默认参数