繁体   English   中英

我是否正确使用C ++的Makefile?

[英]Am I using a Makefile for C++ correctly?

Makefile文件

 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中使用此代码的好方法吗? 此外,我想知道标记为(!)的行是否具有正确顺序的编译器选项。

因此,我相信您的makefile本身不包含'(!)'标记。

你有什么“作品”。 它使用一组严格的选项来编译程序,然后通过绝对路径名运行它。

但是,它不是很灵活:

  • 它只会在运行make建立main
  • 即使您刚刚构建它,它也将始终构建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

这使您可以运行makemake allmake main并构建程序main 如果您使用前两个,则该程序也将运行。 如果源自上次编译以来已更改,则它将仅重新编译程序。 如果您在目录中还有其他的程序,说“exercise2.cpp”和“exercise3.cpp”,那么你可以说make exercise2 exercise3和那些将现在几乎相同的方式被编译的main是。

如果您真的想在构建程序后运行该程序(可能不是您长期要做的事情),那么您可能会重写编译规则(假设使用GNU Make):

% : %.cpp
        ${CXX} ${CXXFLAGS} -o $@ $*.cpp
        ./$@

如果您使用make的经典或POSIX变体,则可以这样写:

.cpp:
        ${CXX} ${CXXFLAGS} -o $@ $*.cpp
        ./$@

如果可用,则使用' % '表示法更灵活。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM