Нубвопрос про makefile

uaha1979

Задача:
скомпилировать файлик и класс
makefile:

# Environment
OBJS = main.o LineFinder.o
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
CC := g++
CFLAGS := -I/usr/local/include/opencv -L/usr/local/lib -g
OBJECTS :=

.PHONY: all clean

all: $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o ./dist/Debug/GNU-Linux-x86/hellowebcam

main.o: main.cpp LineFinder.h
$(CC) $(CFLAGS) ./main.cpp

LineFinder.o: LineFinder.h LineFinder.cpp
$(CC) $(CFLAGS) ./LineFinder.cpp

clean:
rm -f *.o

# include project implementation makefile
include nbproject/Makefile-impl.mk

# include project make variables
include nbproject/Makefile-variables.mk


main.cpp:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <cv.h>
#include <highgui.h>

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include "LineFinder.h"

using namespace cv;

int main(int argc, char* argv[]) {
printf("Hello world\n");
return 0;
}

LineFinder.h:

#ifndef LINEFINDER_H
#define LINEFINDER_H

class LineFinder {
public:
LineFinder;
LineFinder(const LineFinder& orig);

};

#endif /* LINEFINDER_H */

LineFinder.cpp:

#include "LineFinder.h"

LineFinder::LineFinder{

}
LineFinder::LineFinder(const LineFinder& orig){

}

Выдает ошибку:
g++ -I/usr/local/include/opencv -L/usr/local/lib -g ./LineFinder.cpp
/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../lib64/crt1.o: In function `_start':
/home/abuild/rpmbuild/BUILD/glibc-2.17/csu/../sysdeps/x86_64/start.S:119: undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [LineFinder.o] Error 1

Ivan8209

> g++ -I/usr/local/include/opencv -L/usr/local/lib -g ./LineFinder.cpp
Это пытается собрать программу, тебе надо "$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(CFLAGS) -c -o $@ $<"
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

Ivan8209

> CC := g++
Не переопределяй эту переменную, тебе нужна CXX.
Не используй ":=" там, где это не нужно.
> all: $(OBJS)
> $(CC) $(CFLAGS) $(OBJS) -o ./dist/Debug/GNU-Linux-x86/hellowebcam
Не делай этого, старайся определять материальные цели. Например,
$(PROG): $(OBJS); $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LDADD)
all: .PHONY $(PROG)
> LineFinder.o: LineFinder.h LineFinder.cpp
> $(CC) $(CFLAGS) ./LineFinder.cpp
Советую прочитать про встроенные правила и использовать их.
То, что ты делаешь, можно реализовать при помощи файла, наподобие:

CXXFLAGS=-L/usr/local/include
LDLIBS=-lz # или LDFLAGS?
OBJS= some.o file.o

all: .PHONY hello
hello: $(OBJS)

---
Q8: А где это есть и круче?
A8: В VMS!
Оставить комментарий
Имя или ник:
Комментарий: