首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在makefile中实现csplit?

如何在makefile中实现csplit?
EN

Stack Overflow用户
提问于 2020-05-09 10:40:52
回答 1查看 107关注 0票数 0

如何在下面的makefile中具体实现A&B。:这个项目的程序员已经选择将他们的一些代码打包到一个名为chomp.adt的“模块”中,从这个模块中可以生成相关的文件cookie.h和cookie.cpp文件。生成此程序所需的步骤如下:

A.运行命令

代码语言:javascript
运行
复制
    csplit chomp.adt "/Split Here/"

并将生成的文件xx00复制到cookie.h。

B.运行命令

代码语言:javascript
运行
复制
csplit chomp.adt "/Split Here/"

并将生成的文件xx01复制到cookie.cpp。

C.编译cookie.cpp生成cookie.o.

D.编译mainProg.cpp生成mainProg.o。

E.链接.o文件以生成一个名为playChomp的可执行程序

我如何编写一个makefile来执行所有这些步骤?我知道如何实现C-E,我相信,它主要是A和B,我对如何制定规则感到困惑。当我尝试的时候,我把A和B写成-

代码语言:javascript
运行
复制
cookie.h: csplit chomp.adt
         cp xx00 cookie.h
cookie.cpp: csplit chomp.adt
         cp xx01 cookie.cpp

我收到错误消息,“cookie.cpp没有生成目标csplit所需的规则”。

EN

回答 1

Stack Overflow用户

发布于 2020-05-09 12:34:39

一个简单的makefile规则的语法是:

代码语言:javascript
运行
复制
<target> : <prerequisites>
        <recipe>

其中目标是要构建的输出文件,先决条件是用于构建目标的输入文件,配方是将输入文件转换为输出文件的过程。

命令csplit ...是配方的一部分。它不应该被列为先决条件。

因此,您的规则应该如下所示:

代码语言:javascript
运行
复制
cookie.h: chomp.adt
        csplit $< "/Split Here/"
        cp xx00 $@

cookie.cpp: chomp.adt
        csplit $< "/Split Here/"
        cp xx01 $@

你可以在这里读到关于$<$@的内容:https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html没有必要严格地使用它们。

但是,上面的规则并不理想,因为您在不需要的时候运行了两次csplit命令。如果您尝试在启用并行构建的情况下运行make (make -jN),它可能会失败,因为两者将同时运行并覆盖输出文件。

如何做得更好取决于您拥有哪个版本的GNU。如果你有GNU make 4.3,你可以使用:

代码语言:javascript
运行
复制
cookie.h cookie.cpp &: chomp.adt
        csplit $< "/Split Here/"
        cp xx00 cookie.h
        cp xx01 cookie.cpp

这是一个分组的目标,您可以在此处阅读:https://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html#index-grouped-targets

如果您有一个较旧的版本,您可以使用一个技巧,即目标和先决条件都以相同的前缀(字母c)开头;它将如下所示:

代码语言:javascript
运行
复制
%ookie.h %ookie.cpp : %homp.adt
        csplit $< "/Split Here/"
        cp xx00 cookie.h
        cp xx01 cookie.cpp

这是一个模式规则,你可以在这里阅读到:https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61691112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档