Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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不会扩展依赖项_C++_Linux_Makefile - Fatal编程技术网

C++ Makefile不会扩展依赖项

C++ Makefile不会扩展依赖项,c++,linux,makefile,C++,Linux,Makefile,将以下内容用作示例makefile: CC=g++ CFLAGS=-c-墙 LDFLAGS=-lfoobar SOURCES=main.cpp foo.cpp bar.cpp 对象=$(源:.cpp=.o) 可执行文件=你好 全部:$(对象) $(CC)$(LDFLAGS)$(对象)-o$@ $(对象): $(CC)$(CFLAGS)$

将以下内容用作示例makefile:

CC=g++
CFLAGS=-c-墙
LDFLAGS=-lfoobar
SOURCES=main.cpp foo.cpp bar.cpp
对象=$(源:.cpp=.o)
可执行文件=你好

全部:$(对象) $(CC)$(LDFLAGS)$(对象)-o$@

$(对象): $(CC)$(CFLAGS)$<-o$@

$<始终扩展为零

我已尝试将其更改为以下内容:


CC=g++
CFLAGS=-c-墙
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
对象=$(源:.cpp=.o)
可执行文件=你好

全部:$(对象)#或main.o foo.o bar.cpp $(CC)$(LDFLAGS)$(对象)-o$@

.cpp.o: $(CC)$(CFLAGS)$<-o$@

这告诉我main.o没有规则

我是不是遗漏了什么?我看到很多使用这些语法和/或变量和依赖项生成文件。

试试以下方法:

CXX=g++
CXXFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)  # or main.o foo.o bar.cpp
    $(CXX) -o $@ $(LDFLAGS) $(OBJECTS) $(LIBS)

生成每个对象文件的规则是内置的,因此不需要定义它。

$第二次尝试的语法似乎是正确的。你检查了make-rd的输出并确认main.cpp存在了吗?我直接复制并粘贴了你的make文件到一个新的makefile中,我仍然得到“没有规则生成target
main.o”,这是
hello.Stop.需要的。我不明白这个…main.o有什么问题?不是主菜吗?看起来你的文件命名被破坏了!那是。。古怪的我发誓我会直接复制并粘贴到。。我不知道资本是怎么变的。。。人力资源管理。。不过,我现在似乎走对了方向。 CC=g++ CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp foo.cpp bar.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello

all: $(OBJECTS) # or main.o foo.o bar.cpp $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o: $(CC) $(CFLAGS) $< -o $@
CXX=g++
CXXFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp foo.cpp bar.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)  # or main.o foo.o bar.cpp
    $(CXX) -o $@ $(LDFLAGS) $(OBJECTS) $(LIBS)