2015-06-27 3 views
3

У меня возникают проблемы с назначением программирования для класса CS. На этой неделе мы познакомились с makefiles, но это было едва затронуто. Цель состоит в том, чтобы написать программу для вычисления среднего и суммирования предоставленных пользователем удвоений. Программа отлично работает с g ++, но у меня возникают проблемы с make-файлами.Простой make-файл для C++

Я работаю с 3 файлами cpp: main.cpp, average.cpp, summation.cpp. и 2 заголовочные файлы: average.h и summation.h

Вот один делают файл я пробовал:

CXX = g++ 
CXXFLAGS = -std=c++0x -Wall -pedantic-errors -g 

SRCS = summation.cpp average.cpp main.cpp 
OBJS = ${SRCS:.cpp=.o} 
HEADERS = summation.h average.h 

MAIN = myprog 

all: ${MAIN} 
    @echo Simple compilter named myprog has been compiled 

${MAIN}: ${OBJS} ${HEADERS} 
    ${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} ${OBJS} 

.cpp.o: 
    ${CXX} ${CXXFLAGS} -c $< -o [email protected] 

clean: 
    ${RM} ${PROGS} ${OBJS} *.o *~ 

Ошибки: main.cpp: 31: неопределенная ссылка на avg(double*, int)' main.cpp:32: undefined reference to сумму (двойной * , int) '

Если я запустил команду g ++ main.cpp summation.cpp average.cpp -o main Затем он будет компилироваться без каких-либо проблем.

Я не уверен, что у меня что-то не в порядке, или если я что-то упустил. Оглядываясь, я нашел много информации, но это, кажется, над моей головой.

+0

Lol! Заголовок ..... –

+0

Вы также должны увидеть команду компилятора make run, которая сгенерировала ошибку. Что это было? – Useless

+0

определите CXX как «echo g ++», затем запустите и наслаждайтесь подсказкой. –

ответ

5

У меня здесь две проблемы.

Во-первых, заказ SRCS = summation.cpp average.cpp main.cpp. Это приводит к тому, что .o предоставляется в g ++ в порядке summation.o average.o main.o, что вызывает неопределенную ошибку. Вы хотите предоставить их в порядке main.o summation.o average.o, поэтому SRCS должен быть SRCS = main.cpp summation.cpp average.cpp.

Во-вторых, в строке:

${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} ${OBJS} 

Второй ${OBJS} не требуется.
Просьба к следующему:

CXX = g++ 
CXXFLAGS = -std=c++0x -Wall -pedantic-errors -g 

SRCS = main.cpp summation.cpp average.cpp 
OBJS = ${SRCS:.cpp=.o} 
HEADERS = summation.h average.h 

MAIN = myprog 

all: ${MAIN} 
     @echo Simple compilter named myprog has been compiled 

${MAIN}: ${OBJS} 
     ${CXX} ${CXXFLAGS} ${OBJS} -o ${MAIN} 

.cpp.o: 
     ${CXX} ${CXXFLAGS} -c $< -o [email protected] 

clean: 
     ${RM} ${PROGS} ${OBJS} *.o *~. 
Смежные вопросы