1. C
<n>.o的目标用来文件会被自动推导为<n>.c, 并且命令为:
$(CC) -c $(CPPFLAGS) $(CFLAGS)
2. C++
<n>.o的目标用来文件会被自动推导为<n>.cc或<n>.C, 并且命令为:
$(CXX) -c $(CPPFLAGS) $(CFLAGS)
所以在使用默认的推导过程是,如果需要修改编译器或是一些FLAG的值,
可以通过修改以上Makefile预定义的几个隐含变量来实现。
3. 所有隐含规则如果显示的编写,则都可以替代隐含规则。
4. 常用的几个编译方式:
1)ld,通过默认规则推导%.o
$(TARGET_LIB): $(OBJECTS)
$(LD) $(LDFLAGS) -Bstatic -r -o $(TARGET_LIB) $(OBJECTS)
2)编译单个文件
smdevp.o: smdevp.cpp
$(CROSS_CC) -c smdevp.cpp $(CPPFLAGS)
3)批量编译文件
SOURCES = test.cpp ....
$(OBJECTS): $(SOURCES)
$(CROSS_CC) -c $< $(CPPFLAGS)
或
$(OBJECTS): %.o:%.cpp
$(CROSS_CC) -c $< $(CPPFLAGS)