default:
(!) g++ -Werror -Wunused-variable -Wunused-value -Wunused-function -Wfloat-equal -Wall -ansi -o main -pedantic-errors main.cpp
'/home/HomeName/Desktop/main'
我一直在使用这段代码来编译C ++文件。这是在makefile中使用此代码的好方法吗?此外,我想知道标有(!)的行是否具有正确顺序的编译器选项。
答案 0 :(得分:5)
因此,我相信你的makefile本身不包含'(!)'标记。
你有什么'有效'。它使用一组严格的选项编译程序,然后通过绝对路径名运行它。
但是,它不是很灵活:
main
make
main
make main
,它将使用一组不同的命令来构建程序,它将不会运行程序。如果运行程序的行使用当前目录,它会更容易移动代码。
如果使用make的一些内置功能会更好。
C ++和C编译器非常容忍各种选项的订单;你有什么是好的。
在make
内,宏CXX知道C ++编译器;它需要一组由CXXFLAGS定义的标志。因此,您可以使用:
CXX = g++
CXXFLAGS_W = -Werror -Wunused-variable -Wunused-value -Wunused-function \
-Wfloat-equal -Wall
CXXFLAGS_M = -ansi -pedantic-errors
CXXFLAGS = ${CXXFLAGS_M} ${CXFLAGS_W}
all: main
./main
这允许您运行make
,make all
和make main
并构建程序main
。如果您使用前两个中的任何一个,程序也将运行。如果源自上次编译后已更改,它将仅重新编译该程序。如果你在目录中有其他程序,比如'exercise2.cpp'和'exercise3.cpp',那么你就可以说make exercise2 exercise3
,现在这些程序的编译方式与{{1}相同是的。
如果你真的想在构建之后运行该程序(可能不是你长期做的事情),那么你可能会重写编译规则(假设是GNU Make):
main
如果你有% : %.cpp
${CXX} ${CXXFLAGS} -o $@ $*.cpp
./$@
的经典或POSIX变体,你可以写:
make
使用“.cpp:
${CXX} ${CXXFLAGS} -o $@ $*.cpp
./$@
”的符号在可用时更灵活。