为多个C文件创建一个makefile

时间:2018-02-16 00:14:01

标签: c makefile

我无法为5 c程序创建makefile。我现在每个c程序都可以自己编译,但是当我尝试制作一个makefile时,我在运行make时遇到了这个错误

std::vector<Vertex> vertexdata;
for(int i=0; i<object.vertices.size(); i++){
    Vertex v;
    v.position[0] = object.vertices.at(i).coords[0];
    v.position[1] = object.vertices.at(i).coords[1];
    v.position[2] = object.vertices.at(i).coords[2];
    v.normal[0] = object.computedNormals.at(i).coords[0];
    v.normal[1] = object.computedNormals.at(i).coords[1];
    v.normal[2] = object.computedNormals.at(i).coords[2];
    vertexdata.push_back(v);
}

std::vector<GLushort> indexdata;
for(int i=0; i<object.faces.size(); i++){
    OBJFace& face = object.faces.at(i);
    indexdata.push_back(face.items[0].vertexIndex);
    indexdata.push_back(face.items[1].vertexIndex);
    indexdata.push_back(face.items[2].vertexIndex);
}

glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);

// copy data into the buffer object
glBufferData(GL_ARRAY_BUFFER, vertexdata.size() * sizeof(Vertex), &vertexdata[0], GL_STATIC_DRAW);

// set up vertex attributes
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position)); // vertices
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, normal)); // normals
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, texcoord)); // normals

// Create and bind a BO for index data
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibuffer);

// copy data into the buffer object
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexdata.size() * sizeof(GLushort), &indexdata[0], GL_STATIC_DRAW);

glBindVertexArray(0);

glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, indexdata.size(), GL_UNSIGNED_SHORT,     (void*)0);

我尝试放入makefile的文件名是first.c,second.c,third.c,fourth.c和fifth.c。这就是我现在的makefile:

Makefile:2: *** missing separator.  Stop.

3 个答案:

答案 0 :(得分:1)

我们会给出相同的答案多少次,但这是我对同一件事的看法。

Makefile应包含以下内容:

program: first.o second.o third.o fourth.o fifth.o
        gcc -g -o program first.o second.o third.o fourth.o fifth.o

.c.o:
        gcc -c -g $<

gcc行之前的空格是单个制表符而不是空格。如果您使用空格或忘记末尾的冒号,您将得到“缺少分隔符”。

.c.o: 

是旧方法,但它仍然有效。这会创建一个默认规则,将.c文件转换为.o文件。因为我只包含-c选项来编译,所以我没有打扰-o $ @,它会说输出的位置。

观察,这解决了“丢失的分隔符”问题,并生成最初要求的一个可执行文件。

答案 1 :(得分:0)

这是应该格式化的方式:

all: first second third fourth fifth

first: first.c
        gcc -o first first.c
second: second.c
        gcc -o second second.c
third: third.c
        gcc -o third third.c
fourth: fourth.c
        gcc -o fourth fourth.c
fifth: fifth.c
        gcc -o fifth fifth.c

答案 2 :(得分:0)

可替换地:

all: first second third fourth fifth

%.o: %.c    #Suppress default rule
%: %.c
    gcc -o $@ $<