2014-12-09 3 views
0

Я определил объект в пределах mathobj.cpp и его методы в sum1.cpp и multiple.cpp. Код в этом методы использует openmp библиотекуmakefile с использованием g ++ -c и g ++ -fopenmp

Что бы эквивалент Makefile для следующих команд компиляции:

g++ -c main.cpp mathobj.cpp -fopenmp sum1.cpp multiple.cpp 
g++ -fopenmp main.o mathobj.o sum1.o multiple.o -o Test 
+0

Это неясно. Вы можете поместить это прямо в рецепт make-файла, если хотите. –

ответ

2

Вы можете сослаться ниже Makefile:

Makefile:

SRCS = main.cpp \ 
     mathobj.cpp \ 
     sum.cpp \ 
     multiple.cpp 

OBJS=$(SRCS:.cpp=.o) 

.PHONY: all clean 

all: test 
test : $(OBJS) 
[TAB] g++ -fopenmp $^ -o [email protected] 

%.o: %.cpp 
[TAB] g++ -fopenmp -c $< -o [email protected] 

clean: 
[TAB] rm -rf *.o test 
+0

Я тестировал его, но он не работает. –

+0

Проверьте обновленный EDIT –

+0

Это результат компиляции: g ++ -fopenmp -o test g ++: фатальная ошибка: нет входных файлов компиляция завершена. make: *** [test] Ошибка 4 –

2

Я думаю, что большинство людей пишут Makefile s, которые слишком длинны.

Ваша задача становится намного проще, если вы переименуете свой main.cpp в Test.cpp. Тогда вам не нужно определять какие-либо правила в вашем файле Makefile, но вы можете использовать неявные правила.

После переименования, то Makefile становится очень просто:

CXXFLAGS = -fopenmp 
Test: mathobj.o sum.o multiple.o 

Это все, что вам нужно!

$ make 
g++ -fopenmp -c -o mathobj.o mathobj.cpp 
g++ -fopenmp -c -o sum.o sum.cpp 
g++ -fopenmp -c -o multiple.o multiple.cpp 
g++ -fopenmp Test.cpp mathobj.o sum.o multiple.o -o Test 

Но, если вы хотите, вы также можете пропустить промежуточный шаг и собрать все на одном дыхании (опять же, эти 2 строки все, что вам нужно в вашем Makefile):

CXXFLAGS = -fopenmp 
Test: mathobj.cpp sum.cpp multiple.cpp 

Это приводит до:

$ make 
g++ -fopenmp Test.cpp mathobj.cpp sum.cpp multiple.cpp -o Test