Я изучаю make-файл и пытаюсь написать универсальный make-файл для c / c ++. Файловая структура, на которую я нацеливаюсь, выглядит следующим образом:
|root
| Makefile
| inc
|- commmon.hpp
|- sourcelib
|-coolthing.hpp (#include <common.hpp>)
| src
|- main.cpp (#include <sourcelib/coolthing.hpp>)
|- sourcelib
|-coolthing.cpp (#include <sourcelib/coolthing.hpp>)
Это то, что у меня сейчас есть:
IDIR=inc
SRCIR=src
BIN=name
CC=g++
CFLAGS=-I $(IDIR) # specify where to find the headfiels
DEPS=$(shell find ./$(IDIR) -name "*.hpp") #find all the header files
CSRCS=$(shell find ./$(SRCIR) -name "*.c") #find all the .c file
CPPSRCS=$(shell find ./$(SRCIR) -name "*.cpp") #find all the .cpp file
COBJ=$(CSRCS:.c=.o)
CPPOBJ=$(CPPSRCS:.cpp=.o)
all: $(BIN)
%.o: %.cpp $(DEPS)
${CC} -c $^ $(CFLAGS)
%.o: %.c $(DEPS)
${CC} -c $^ $(CFLAGS)
$(BIN): $(COBJ) $(CPPOBJ)
OBJ=$(shell find . -name "*.o") # find all the object file in the directroy of this Makefile
$(CC) -o $@ $(OBJ)
Компилятор может успешно создать объектный файл исходных кодов. Однако, когда он пытается связать файлы .o, компилятор выдает эту ошибку.
g++ -c src/main.cpp inc/common.hpp inc/sourcelib/coolthing.hpp -I inc
g++ -c src/sourcelib/coolthing.cpp inc/common.hpp inc/sourcelib/coolthing.hpp -I inc
OBJ=./coolthing.o ./main.o
/bin/sh: 1: ./main.o: Exec format error Makefile:24: recipe for
target 'name' failed make: *** [name] Error 2
Может кто-нибудь подсказать, как решить эту проблему? Я нуб, чтобы сделать файл. Большое вам спасибо!