Ошибка makefile в C ++ "неявный ввод / запуск для основного исполняемого файла" - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть такая структура для моего проекта:

root
  |____Makefile
  |
  |___src
  |     |____*.cpp  
  |
  |___includes
  |      |___*.h
  |
  |___obj
  |___tmp
  |___bin

Проблема в том, что когда я пытаюсь сделать, я получаю эту ошибку:

    g++ -std=c++11 obj/book.o -o bin/main
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Мой main.cpp находится внутри srcчем у меня есть файл .h, где я объявляю структуру и некоторые функции и .cpp, где я определяю все.В основном и в cpp я делаю

#include "../includes/myfile.h"

Как мне скомпилировать и исправить эту проблему?Вот мой make-файл:

CXX = g++
CXXFLAGS = -std=c++11 -I..
LDFLAGS = -std=c++11
EXECUTABLE= bin/main
SOURCES = $(wildcard src/*.cpp)
HEADERS = $(wildcard includes/*.h)
OBJECTS = $(patsubst src/%.cpp, obj/%.o, $(SOURCES))

BASE = $(USER)

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CXX) $(LDFLAGS) $< -o $@

obj/%.o: src/%.cpp
    $(CXX) -c $(CXXFLAGS) $< -o $@

clean: 
    rm $(OBJECTS)

rmproper:
    rm $(OBJECTS) $(EXECUTABLE)

pdf:
    a2ps Readme.txt makefile $(HEADERS) $(SOURCES) -o /tmp/out.ps
    ps2pdf /tmp/out.ps $(BASE).pdf

zip:
    zip $(BASE).zip Readme.txt makefile $(HEADERS) $(SOURCES)

1 Ответ

0 голосов
/ 23 сентября 2018

Проблема здесь:

$(EXECUTABLE): $(OBJECTS) $(CXX) $(LDFLAGS) $< -o $@.

$< - это первое предварительное условие, т. Е. Первый объектный файл в вашем списке $(OBJECTS) (который оказывается * 1008).* согласно вашему сообщению об ошибке).То, что вы хотите передать, это весь список объектных файлов, который может быть выполнен с помощью $^ или даже $(OBJECTS) вместо $<.

...