C++ 生成具有不同规则的.o生成文件

C++ 生成具有不同规则的.o生成文件,c++,makefile,C++,Makefile,如果我的make文件中有这样的规则: CC = g++ CFLAGS = -Wall COMPILE = $(CC) $(CFLAGS) -c src = A.cpp \ main.cpp test_src = Test.cpp test = testAll OBJFILES := $(patsubst %.cpp,%.o,$(src)) TEST_OBJS := $(patsubst %.cpp,%.o,$(test_src)) %.o: %.cpp $(COMP

如果我的make文件中有这样的规则:

CC = g++
CFLAGS = -Wall
COMPILE = $(CC) $(CFLAGS) -c

src = A.cpp \
      main.cpp

test_src = Test.cpp 
test = testAll

OBJFILES := $(patsubst %.cpp,%.o,$(src))
TEST_OBJS := $(patsubst %.cpp,%.o,$(test_src))

%.o: %.cpp
    $(COMPILE) -I UnitTest++/src -LUnitTest++/ -l UnitTest++ -o $@ $< 
CC=g++
CFLAGS=-Wall
编译=$(CC)$(CFLAGS)-c
src=A.cpp\
main.cpp
test_src=test.cpp
测试=测试
OBJFILES:=$(patsubst%.cpp、%.o、$(src))
测试对象:=$(patsubst%.cpp,%.o,$(测试对象)
%.o:%.cpp
$(编译)-I UnitTest++/src-LUnitTest++/-l UnitTest++-o$@$<
最后,我将UnitTest++包含并链接到main和A.cpp等非测试文件
如何使“仅使测试类”链接到测试库?

指定您的规则适用于哪些文件:

$(TEST_OBJS): %.o: %.cpp
    $(COMPILE) -I UnitTest++/src -LUnitTest++/ -l UnitTest++ -o $@ $<
$(测试对象):%.o:%.cpp
$(编译)-I UnitTest++/src-LUnitTest++/-l UnitTest++-o$@$<

@dmckee我刚刚用gnu make运行了它。作品所以不是gmake特定的。@anio:gmake表示GNU版本。这个名称通常用于在系统make已经存在的情况下安装gnumake(无可否认,这在当今并不常见)。我刚刚检查了GNU make的文档,了解到其他一些make支持基于%的模式规则,所以我仍然不知道。@dmckee:在简单地看了一下POSIX
make
之后,我想是这样的(就此而言,POSIX不要求支持提问者规则,因为目标中%的含义是实现定义的)。GNU make是我使用过的唯一版本,因此我以前从未调查过POSIX对
make
的看法。我没有想到有人使用
g++
作为他们的编译器可能会使用任何其他
make
:-)这也是非常有用的。。。当您有不同的子目录需要使用不同的gcc标志(几个lib)进行编译时,愚蠢的问题时间:如果您正在创建对象文件,编译器是否实际调用链接器(从而使用库)?如果你在处理程序,也许。