【问题标题】:Makefile with multiple targets and creates a directory with executable具有多个目标的 Makefile 并创建一个包含可执行文件的目录
【发布时间】:2016-02-02 02:03:40
【问题描述】:

我不经常使用makefile,因此我只会制作基本的。我试过阅读如何解决我的问题,但我迷路了。我需要的是一个有两个目标的makefile和测试。这两个目标都需要使用 g++ -std=c+11 -Wall -Werror -ansi -pedantic 编译程序,并且当编译器构建可执行文件时,唯一需要编译的文件是 main.cpp 它需要放置可执行文件位于名为 bin 的新目录中。而且我假设如果我要再次使用makefile,它需要检查是否已经创建了bin。 我知道如何创建一个简单的makefile,例如 全部: g++ -std=c++11 -Wall -Werror -ansi -pedantic main.cpp

这会在当前目录中创建一个名为 a.out 的可执行文件,但就我对 makefileS 的了解而言,这差不多

【问题讨论】:

  • 获取“a.out”以外的名称,需要编译器选项-o foo,独立于make文件。你也可以写-o ./bin/foo,顺便说一句。
  • 如果你觉得你将来会做很多这样的事情,你可能要考虑在你想学习的构建系统上做出战略选择(首先)。 CMAKE 是一个很好的候选者。
  • 好的,我不确定这有多正确,但它基本上做到了我想要的,所以我创建了
  • 对不起,我的最后一条评论切断了我的手机故障,哈哈,我不知道这有多正确,但我创建了一个包含所有内容的 makefile:main.cpp。 mkdir bin g++ 标志 -o .bin/foo.out main.cpp。它在一个名为 bin 的新文件夹中创建了一个可执行文件现在我在我的指示中有另一个问题它说我需要创建另一个名为 test 的目标,它执行完全相同的事情,所以我的猜测是我只是复制“所有”目标并粘贴它在用“测试”替换“全部”? PS 抱歉格式不好,在我的手机上输入这个很糟糕。

标签: c++ compilation makefile g++


【解决方案1】:

Makefile 所做的只是指定构建依赖项,以及为构建这些依赖项而执行的命令。

诸如创建输出目录之类的事情。人。不是make 的工作本身,而是由执行的命令决定的事情。 Makefile 也没有指定构建命令的输出去向。当然,这是由实际执行的命令指定的。例如,使用gcc-o 选项指定编译输出的位置。所以:

all: bin/main

test: bin/main

bin/main: main.cpp
    mkdir -p bin
    g++ -std=c++11 -Wall -Werror -ansi -pedantic -o bin/main main.cpp 

在这些情况下使用mkdir -p 非常方便。如果给定目录不存在,则创建它。如果它已经存在,mkdir 会安静地终止而不会出现错误。

【讨论】:

  • 啊,我明白了。谢谢你的好先生,我试过你的,效果很好。
猜你喜欢
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多