Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何更改在Makefile中自动生成的命令的默认参数_C++_Makefile - Fatal编程技术网

C++ 如何更改在Makefile中自动生成的命令的默认参数

C++ 如何更改在Makefile中自动生成的命令的默认参数,c++,makefile,C++,Makefile,假设项目中只有3个文件:a.h a.cpp main.cpp。我正在使用ubuntu 14.04 生成文件: CFLAG=-Wall CC=clang m:main.o a.o ${CC} ${CFLAG} -o $@ $^ a.o:a.h main.o:a.h CXXFLAGS=-Wall CXX=clang m:main.o a.o ${CXX} ${CXXSFLAGS} -o $@ $^ a.o:a.h main.o:a.h 问题是编译a.o时,它会生

假设项目中只有3个文件:a.h a.cpp main.cpp。我正在使用ubuntu 14.04

生成文件:

CFLAG=-Wall
CC=clang

m:main.o a.o
  ${CC} ${CFLAG} -o $@ $^

a.o:a.h   
main.o:a.h
CXXFLAGS=-Wall
CXX=clang

m:main.o a.o
        ${CXX} ${CXXSFLAGS} -o $@ $^

a.o:a.h
main.o:a.h
问题是编译a.o时,它会生成如下命令:

g++ -c -o a.o a.cpp
a.o:a.cpp a.h
   ${CC} ${CFLAG} -o $@ a.cpp
main.o:a.h main.cpp
   ${CC} ${CFLAG} -o $@ main.cpp
但我所期望的是:

clang -Wall -c -o a.o a.cpp
除了像这样重写Makefile,还有其他想法吗

g++ -c -o a.o a.cpp
a.o:a.cpp a.h
   ${CC} ${CFLAG} -o $@ a.cpp
main.o:a.h main.cpp
   ${CC} ${CFLAG} -o $@ main.cpp

如文献所记载,按惯例持有C++变量的变量为:代码> CXX<代码>未<代码> cc>代码>。code>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

在我将CFLAGS更改为CXXFLAGS后,它现在可以工作了,谢谢!