1
我開始研究一個小項目來實現C++中的todo應用程序。MakeFile只編譯一個文件
我寫了一個Makefile來編譯我的C++文件,但Makefile只編譯main.cc而沒有其他東西。
這裏是我的生成文件
#MakeFile for Building the ToDoList App
# Compile CXX Files
CXX := g++-4.9
CXXFLAGS := -std=c++11
CXXFILES := $(wildcard src/*.cc src/lexer/*.cc)
CXXOBJECTS := $(CXXFILES:.cc=.o)
CXXHEADERS := $(wildcard *.h)
# Link all Object Files
LD := ld
LDFLAGS :=
# Declare Clean and Run as Phony Targets
.PHONY: clean run
# The Final Product will be the To-Do APP
all: TedO.app
# Compile the ToDO APP
TedO.app: $(CXXOBJECTS)
$(LD) $(LDFLAGS) -o build/[email protected] $^
# Run the APP from the Build Folder
run: TedO.app
./build/$^
# Compile the CC files into Object files and place it into the same directory.
%.o: %.cc
$(CXX) $(CXXFLAGS) -o [email protected] $<
# Clean all the Objects
clean: $(CXXOBJECTS)
rm $^
這裏是我的目錄結構
.
├── Makefile
├── Makefile.swp
├── build
│ ├── tedo
│ └── tedo.txt
├── doc
├── src
│ ├── lexer
│ │ ├── lexer.cc
│ │ └── lexer.h
│ └── main.cc
└── tree.txt
4 directories, 8 files
這裏運行,當我從控制檯輸出使
g++-4.9 -std=c++11 -o src/main.o src/main.cc
Undefined symbols for architecture x86_64:
"lexer::lexer()", referenced from:
_main in ccmWqgIU.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [src/main.o] Error 1
這是什麼;乾淨的意思是? –
@AswinMohan這只是一種在與目標相同的線上寫配方的方法,';'之後的任何內容都是第一個配方。例如'run'可以寫成'run:build/TedO.app; $ <'儘管通常限制這種類型的語法與沒有先決條件的目標相比更好。 – user657267