为C ++和C源代码创建Makefile

时间:2015-03-29 15:23:15

标签: c++ c makefile

我正在开发一个项目,我正处于需要在Linux机器上编译两个脚本的阶段,一个.C和一个C ++。

C ++代码控制一个摄像头,并且已经提供了制造商提供的makefile,以便使用计算机上安装的驱动程序编译GrabConsoleExampleMain.cpp

我要做的是首先将测试函数function.c添加到GrabConsoleExampleMain.cpp中,方法是添加一个头文件function.hfunction.c包含一个名为printtest的函数,该函数在屏幕上打印一些内容以显示其有效,我已从GrabConsoleExampleMain.cpp调用它。

这是原始的makefile:

SOURCES = GrabConsoleExampleMain.cpp

ifeq "$(MAKECMDGOALS)" "debug"
 CPPFLAGS = -D_DEBUG -ggdb3 -O0
 TGT = GrabConsoleExample_d 
 CONFIGURATION = Debug
else 
 CPPFLAGS = -O3 
 TGT = GrabConsoleExample 
 CONFIGURATION = Release
endif

CPPFLAGS += -I$(CVB)/include
LDFLAGS = -L$(CVB)/lib
LDLIBS= -lCVCImg -lCVCUtilities -lCVCDriver -lCVGenApi
CONFIGURATIONPREFIX= ./$(CONFIGURATION)/
DEPENDENCIES= $(addprefix $(CONFIGURATIONPREFIX),$(SOURCES:.cpp=.d) )  

%.o: %.cpp
    @mkdir -p $(CONFIGURATION)
    @echo Building CXX object $(CONFIGURATION)/$@
    @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $(CONFIGURATION)/$@ $<

OBJECTS = $(addprefix $(CONFIGURATIONPREFIX),$(SOURCES:.cpp=.o) )

$(TGT): $(SOURCES:.cpp=.o) 
    @echo Linking CXX executable $(CONFIGURATION)/$(TGT)
    @$(CXX) $(LDFLAGS) $(OBJECTS) -o $(CONFIGURATION)/$(TGT) $(LDLIBS)

all: $(TGT)

.PHONY: clean
clean:
    @rm -rf Debug
    @rm -rf Release

debug: $(TGT)

这是改变后的makefile:

CXXSOURCES = GrabConsoleExampleMain.cpp
CSOURCES = function.c

ifeq "$(MAKECMDGOALS)" "debug"
 CPPFLAGS = -D_DEBUG -ggdb3 -O0
 TGT = GrabConsoleExample_d 
 CONFIGURATION = Debug
else 
 CPPFLAGS = -O3 
 TGT = GrabConsoleExample 
 CONFIGURATION = Release
endif

CPPFLAGS += -I$(CVB)/include
LDFLAGS = -L$(CVB)/lib
LDLIBS= -lCVCImg -lCVCUtilities -lCVCDriver -lCVGenApi
CONFIGURATIONPREFIX= ./$(CONFIGURATION)/
DEPENDENCIES= $(addprefix $(CONFIGURATIONPREFIX),$(CXXSOURCES:.cpp=.d) $(addprefix $(CONFIGURATIONPREFIX),$(CSOURCES:.c=.d))  

%.o: %.cpp
    @mkdir -p $(CONFIGURATION)
    @echo Building CXX object $(CONFIGURATION)/$@
    @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $(CONFIGURATION)/$@ $<
%.o: %.c
    @echo Building CC object $(CONFIGURATION)/$@
    @$(CC) -c $(CCFLAGS) -o $(CONFIGURATION)/$@ $<

OBJECTS = $(addprefix $(CONFIGURATIONPREFIX),$(CXXSOURCES:.cpp=.o) ) $(addprefix $(CONFIGURATIONPREFIX),$(CSOURCES:.c=.o)) #this edit without TGT edit below causes ./Release/function.o: No such file or directory

$(TGT): $(CXXSOURCES:.cpp=.o) $(CSOURCES:.c=.o)
    @echo Linking CXX executable $(CONFIGURATION)/$(TGT)
    @$(CXX) $(LDFLAGS) $(OBJECTS) -o $(CONFIGURATION)/$(TGT) $(LDLIBS)
#g++ -Ldir Grabconsole.o function.o -o Release/GrabConsole -lCVC...

all: $(TGT)

    .PHONY: clean
    clean:
        @rm -rf Debug
        @rm -rf Release

   debug: $(TGT)

这是通过终端返回的内容:

lab_user@ubuntu12:~/Documents/iScope$ make all
Building CXX object Release/GrabConsoleExampleMain.o  
Linking CXX executable Release/GrabConsoleExample
./Release/GrabConsoleExampleMain.o: In function `process_image_pair(int, int, double*, double*, double*, double*, double*, double*)':
GrabConsoleExampleMain.cpp:(.text+0x321): undefined reference to `printtest()'
./Release/GrabConsoleExampleMain.o: In function `main':
GrabConsoleExampleMain.cpp:(.text.startup+0x16c): undefined reference to `printtest()'
collect2: ld returned 1 exit status
make: *** [GrabConsoleExample] Error 1

我已经看过编写自己的makefile,但我不确定如何将它与相机制造商提供的内容集成。我知道使用g ++一起编译C和C ++代码应该可行,所以我认为错误必须在代码的$(TGT):行中。

如果有人可以提供帮助,我会非常感激,如果您需要我提供更多信息,请告诉我。

由于

0 个答案:

没有答案