Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Makefile项目赢得';不更改makefile后生成t(几乎相同的make,工作正常)_C++_C_Makefile - Fatal编程技术网

C++ Makefile项目赢得';不更改makefile后生成t(几乎相同的make,工作正常)

C++ Makefile项目赢得';不更改makefile后生成t(几乎相同的make,工作正常),c++,c,makefile,C++,C,Makefile,就在昨天,我在linux下编译了一个makefile项目。现在项目将不会编译,我不记得对makefile本身做了任何更改。它抛出了一个make:**没有规则将目标设置为“obj/tranquimain.o”,这是“tranquire;”所需要的;。停止。错误出现在make。我所做的唯一真正的更改是,当我从另一个项目复制代码和修改文件时,我更改了某些文件(包括依赖项)的名称,然后更改了修改文件中的\u DEPS。所有文件都在必要的位置 应该注意的是,如果我从_OBJ列表中删除除tranquimai

就在昨天,我在linux下编译了一个makefile项目。现在项目将不会编译,我不记得对makefile本身做了任何更改。它抛出了一个
make:**没有规则将目标设置为“obj/tranquimain.o”,这是“tranquire;”所需要的;。停止。
错误出现在
make
。我所做的唯一真正的更改是,当我从另一个项目复制代码和修改文件时,我更改了某些文件(包括依赖项)的名称,然后更改了修改文件中的
\u DEPS
。所有文件都在必要的位置

应该注意的是,如果我从_OBJ列表中删除除tranquimain.o以外的所有其他文件,它的编译效果很好<代码>在这里输入代码我希望我能提供的不仅仅是代码和这些知识,但我不知道问题出在哪里

适当的Makefile:“Makefile”

#/usr/bin/make
CC=gcc
CP=g++
SRC_DIR=#。
OBJ_DIR=OBJ
INC_DIR=../include
LIB_DIR=../LIB
LIBS=-lm-lSDL-lSDLmain-lSDL_image-lSDL_mixer-lSDL_ttf-lSDL_net-lGL-lGLU-lGLEW
CFLAGS=-I$(INC_DIR)-L$(LIB_DIR)-std=gnu++0x
_DEPS=DefaultConfig.h BaseApplication.h BasePlugin.h SDLImage.h SDLFont.h SDLWindow.h SDLInput.h SDLRenderer.h SDLApplication.h Math2D.h SDLTimer.h
部门=$(patsubst%,$(INC\U DIR)/%,$(部门))
_OBJ=tranquimain.o BaseApplication.o BasePlugin.o SDLImage.o SDLFont.o SDLWindow.o SDLInput.o SDLRenderer.o SDLApplication.o Math2D.o SDLTimer.o
OBJ=$(patsubst%,$(OBJ\U DIR)/%,$(\U OBJ))
$(OBJ_DIR)/%.o:%.cpp$(DEPS)
$(CP)-c-o$@$<$(CFLAGS)
宁静:$(OBJ)
$(CP)-o../bin/$@$^$(CFLAGS)$(LIBS)
.假冒:干净
清洁:
rm-f$(OBJ\U DIR)/*.o*~core$(INC\U DIR)/*~
main.cpp(只是依赖项中的第一个文件)

#包括
#包括
#包括
int main(int argc,char*args[]
{
bool running=true;
while(running==true)
{
}
返回0;
}

当我从上面的Makefile和项目结构开始时

├── 包括/
└── src/
├── 生成文件
├── 特兰斯曼
└── obj/
然后我得到了与“宁静”所需的相同的
make:**No-rule使目标为“obj/tranquimain.o”。
上面报告的错误。这是什么原因?让我们在调试模式下运行make来找出答案

第一加

。后缀:
%::SCCS/s.%
%::RCS/%
%::RCS/%,v
%:%,v
%::s.%
到Makefile的顶部,以取消一些只会使调试输出混乱的默认规则

然后,运行
make-d

GNU Make 3.81
版权所有(C)2006免费软件基金会。
这是自由软件;有关复制条件,请参见源。
没有担保;甚至不是为了适销性或是否适合
特殊目的。
此程序为i386-apple-darwin11.3.0构建
正在读取生成文件。。。
正在读取makefile“makefile”。。。
正在更新生成文件。。。。
正在考虑目标文件“Makefile”。
正在查找“Makefile”的隐式规则。
未找到“Makefile”的隐式规则。
已完成目标文件“Makefile”的先决条件。
无需重新生成目标“Makefile”。
更新目标。。。。
正在考虑目标文件“宁静”。
“宁静”文件不存在。
正在考虑目标文件“obj/tranquimain.o”。
文件“obj/tranquimain.o”不存在。
正在查找'obj/tranquimain.o'的隐式规则。
正在尝试使用茎“typemain”的模式规则。
正在尝试隐式先决条件'trunquimain.cpp'。
正在尝试规则先决条件“../include/DefaultConfig.h”。
正在尝试使用茎“typemain”的模式规则。
正在尝试隐式先决条件'trunquimain.cpp'。
正在尝试规则先决条件“../include/DefaultConfig.h”。
正在查找中间文件为“../include/DefaultConfig.h”的规则。
避免隐式规则递归。
找不到'obj/tranquimain.o'的隐式规则。
已完成目标文件“obj/tranquimain.o”的先决条件。
必须重新制作目标'obj/tranquimain.o'。
make:**没有规则将目标'obj/tranquimain.o'设置为'tranquire'所需。停止
make
首先确保
Makefile
是最新的。然后,它尝试通过执行深度优先搜索,构建所有必需的依赖项,使
目标变得平静
tranquire
依赖于
${OBJ}
,其中的第一个元素是
OBJ/tranquimain.o
。根据
${OBJDIR}/%.o
规则,这取决于
tranquimain.cpp
和所有
${DEPS}
${DEPS}
的第一个元素是
./include/DefaultConfig.h
,因此
make
尝试构建它。但它并不存在,也没有建立它的规则
make
得出结论,它无法使用此规则生成
obj/tranquimain.o
,因为缺少依赖项。它试图找到另一个规则来使用其他确实存在的依赖项构建它,但没有这样的规则。因此,
make
停下来说,“没有[有效的]规则[存在依赖项或可以为其构建依赖项]来生成target
obj/tranquimain.o

解决办法是什么?确保所有依赖项都存在。使用此Makefile,要编译任何内容,您的项目必须至少包含:

。
├── 包括/
│   ├── BaseApplication.h
│   ├── BasePlugin.h
│   ├── DefaultConfig.h
│   ├── Math2D.h
│   ├── SDLApplication.h
│   ├── SDLFont.h
│   ├── SDLImage.h
│   ├── SDLInput.h
│   ├── SDLRenderer.h
│   ├── SDLTimer.h
│   └── SDLWindow.h
├── 解放党/
└── src/
├── BaseApplication.cpp
├── BasePlugin.cpp
├── 生成文件
├── Math2D.cpp
├── SDLApplication.cpp
├── SDLFont.cpp
├── SDLImage.cpp
├── SDLInput.cpp
├── 斯德伦德
#!/usr/bin/make

CC      = gcc
CP      = g++

SRC_DIR     = #.
OBJ_DIR     = obj
INC_DIR     = ../include
LIB_DIR     = ../lib

LIBS        = -lm -lSDL -lSDLmain -lSDL_image -lSDL_mixer -lSDL_ttf -lSDL_net -lGL -lGLU -lGLEW
CFLAGS      = -I$(INC_DIR) -L$(LIB_DIR) -std=gnu++0x


_DEPS   = DefaultConfig.h BaseApplication.h BasePlugin.h SDLImage.h SDLFont.h SDLWindow.h SDLInput.h SDLRenderer.h SDLApplication.h Math2D.h SDLTimer.h
DEPS    = $(patsubst %,$(INC_DIR)/%,$(_DEPS))

_OBJ    = TranquilMain.o BaseApplication.o BasePlugin.o SDLImage.o SDLFont.o SDLWindow.o SDLInput.o SDLRenderer.o SDLApplication.o Math2D.o SDLTimer.o
OBJ = $(patsubst %,$(OBJ_DIR)/%,$(_OBJ))


$(OBJ_DIR)/%.o: %.cpp $(DEPS)
    $(CP) -c -o $@ $< $(CFLAGS)

tranquil: $(OBJ)
    $(CP) -o ../bin/$@ $^ $(CFLAGS) $(LIBS)

.PHONY: clean
clean:
    rm -f $(OBJ_DIR)/*.o *~ core $(INC_DIR)/*~
#include <iostream>
#include <fstream>
#include <string>


int main( int argc, char* args[] )
{
    bool running = true;

    while( running == true )
    {
    }

    return 0;
}
#BAD!
tranquil: $(OBJ)
<space><space>$(CP) -o ../bin/$@ $^ $(CFLAGS) $(LIBS)

#GOOD!
tranquil: $(OBJ)
<tab>$(CP) -o ../bin/$@ $^ $(CFLAGS) $(LIBS)