我正在开发一个项目,我正处于需要在Linux机器上编译两个脚本的阶段,一个.C和一个C ++。
C ++代码控制一个摄像头,并且已经提供了制造商提供的makefile,以便使用计算机上安装的驱动程序编译GrabConsoleExampleMain.cpp
。
我要做的是首先将测试函数function.c
添加到GrabConsoleExampleMain.cpp
中,方法是添加一个头文件function.h
。 function.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):行中。
如果有人可以提供帮助,我会非常感激,如果您需要我提供更多信息,请告诉我。
由于