如果,你正在为寻找一个通用简易的、智能搜索源文件的 Makefile 而奔波的话,那么下边的Demo你有可能看得上它:
例如,你有一个目录,这个目录里目前只是生成一个二进制文件,其源码全部在这里,那么你可以尝试第一个版本的 Makefile
# Makefile, 2012-06-15 T1738
# TODO
# ----------------------------------
NAME = AppDemo
VERSION = 1.0.0
RELEASE = 01
# ----------------------------------
BIN = $(NAME)
OBJS = $(patsubst %.cpp,%.o,$(wildcard $(SRC_DIR)/*.cpp))
# TODO
# BEGIN ----------------------------------
# Folders
SRC_DIR = .
# Flags
CXXFLAGS = -Wall
CXXFLAGS += -I$(SRC_DIR)
CPPFLAGS = -D_DEBUG
LDFLAGS = -L$(SRC_DIR)
LIBS = -lpthread
# END ----------------------------------
.PHONY: all clean
all: $(BIN)
$(BIN): $(OBJS)
$(CXX) $(CPPFLAGS) $(LDFLAGS) $^ -o $@ $(LIBS)
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $^ -o $@
clean:
$(RM) $(OBJS) $(BIN)
$ls --color
main.cpp makefile
其中 main.cpp 是一个hello world小程序,下面编译并运行
$make
g++ -Wall -I. -D_DEBUG -c main.cpp -o main.o
g++ -D_DEBUG -L. main.o -o AppDemo -lpthread
$ls --color
AppDemo main.cpp main.o makefile
$./AppDemo
Hello World!
爽了吧。还可以添加一个源代码,而不用修改 makefile。 例如添加一个接口文件 HelloWorld.cpp 用来封装 sayHelloWorld() 方法
HelloWorld.h
// HelloWorld.h
#ifndef _HELLOWORLD_H
#define _HELLOWORLD_H
void sayHelloWorld();
#endif
// HelloWorld.cpp
#include "HelloWorld.h"
#include <iostream>
void sayHelloWorld() {
std::cout << "Hello World!" << std::endl;
}
// main.cpp
#include "HelloWorld.h"
int main(int argc, char **argv) {
sayHelloWorld();
return 0;
}
$make clean
rm -f ./HelloWorld.o ./main.o AppDemo
$make
g++ -Wall -I. -D_DEBUG -c HelloWorld.cpp -o HelloWorld.o
g++ -Wall -I. -D_DEBUG -c main.cpp -o main.o
g++ -D_DEBUG -L. HelloWorld.o main.o -o AppDemo -lpthread
$./AppDemo
Hello World!
下载 - http://download.youkuaiyun.com/detail/wxqee/4375731