訪問的cpp文件我已經與對象創建一個問題對居住在2名不同的目錄,如下所示一個cpp文件:Makefile文件試圖從其他目錄
- Project-xyz
- Hello
- Hello.cpp
- World
- Main.cpp
- World.cpp
- Makefile
爲了更清楚這裏代碼的外觀(只是一個虛擬代碼)。
你好/ Hello.h
#ifndef HELLO_H
#define HELLO_H
void HelloPrint();
#endif // HELLO_H
你好/ Hell.cpp
#include <iostream>
#include "Hello.h"
void HelloPrint()
{
std::cout <<"Hello" << std::endl;
}
世界/ World.h
#ifndef WORLD_H
#define WORLD_H
void WorldPrint();
#endif // WORLD_H
世界/ World.cpp
#include <iostream>
#include "World.h"
void WorldPrint()
{
std::cout <<"World!" << std::endl;
}
世界/ Makefile中 使用here給出一個makefile。哪個工作正常。但它不會創建任何obj文件。
# set non-optional compiler flags here
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic-errors
# set non-optional preprocessor flags here
# eg. project specific include directories
CPPFLAGS +=
# find cpp files in subdirectories
SOURCES := $(shell find . -name '*.cpp')
SOURCES += $(shell find ../hello -name '*.cpp')
# find headers
HEADERS := $(shell find . -name '*.h')
OUTPUT := HelloWorld
# Everything depends on the output
all: $(OUTPUT)
# The output depends on sources and headers
$(OUTPUT): $(SOURCES) $(HEADERS)
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -o $(OUTPUT) $(SOURCES)
clean:
$(RM) $(OUTPUT)
我看着它採用如圖所示here產生在特定目錄中的OBJ文件生成文件的解決方案。
現在我試圖使用下面的make文件爲world/objdir/hello.o中的hello/hello.cpp文件生成obj文件。哪個不起作用。 如何讓它工作?
世界/ Makefile中
GCC=g++
CPPFLAGS=-c -Wall
LDFLAGS=
OBJDIR=objdir
OBJ=$(addprefix $(OBJDIR)/, $(patsubst %.cpp, %.o, $(wildcard *.cpp)))
TARGET=HelloWorld
.PHONY: all clean
all: $(OBJDIR) $(TARGET)
$(OBJDIR):
mkdir $(OBJDIR)
$(OBJDIR)/%.o: %.cpp
$(GCC) $(CPPFLAGS) -c $< -o [email protected]
$(TARGET): $(OBJ)
$(GCC) $(LDFLAGS) -o [email protected] $^
clean:
@rm -f $(TARGET) $(wildcard *.o)
@rm -rf $(OBJDIR)
當我嘗試運行,使其拋出下面的錯誤。
g++ -c -Wall -c main.cpp ../hello/Hello.cpp -o objdir/main.o
g++: fatal error: cannot specify -o with -c, -S or -E with multiple files
compilation terminated.
make: *** [objdir/main.o] Error 4
它不能爲hello/Hello.cpp文件生成obj文件,因此引發此錯誤。
從makefile大師的任何幫助表示讚賞! :)
-o必須在鏈接「phase」中使用:'link:$(GCC)-o $(TARGET)$(OBJ)'。順便說一句,你的項目中沒有主要 – LPs
哦,對不起,我錯過了補充。這只是一個簡單的代碼,我試圖解釋這個問題。這裏是 #include「../hello/Hello.h」 #include「World。H」 INT主要() { HelloPrint(); 器WorldPrint(); }。 – YOGI