Makefile: «Нет такого файла или каталога» для целевого файла - PullRequest
0 голосов
/ 08 мая 2018

Во-первых, я должен признать, что make-файлы - это то, к чему я очень неопытен, поэтому я прошу прощения, если это ошибка, которую я должен был решить сам, но я потратил несколько часов на это, включая чтение различных ответы на этом сайте, и не смогли найти решение.

С учетом вышесказанного я создал следующий make-файл для компиляции своего кода на машине с Linux; он прекрасно завершает подкомпиляции, но когда дело доходит до самого вывода, xPlatST, он выдает ошибку.

g++ -std=c+=11 -g -Wall -pthread -c -o xPlatST.o xPlatST.cpp
g++ -std=c+=11 -g -Wall -pthread -c -o stdafx.o stdafx.cpp
g++ -std=c+=11 -g -Wall -pthread -c xPlatST xPlatST.o stdafx.o -L../hwloc
g++ error: xPlatST: No such file or directory
make: *** [xPlatST] Error 1

Кажется, мне кажется, что xPlatST является одним из файлов компиляции и, следовательно, не может его найти, но я не могу понять, почему.

hwloc - сторонняя библиотека, которая не должна быть связана с этой проблемой. Код компилируется просто отлично, когда компилируется непосредственно из командной строки.

Мои файлы: xPlatST.cpp, xPlatST.h, stdafx.cpp, stdafh.h

Код выглядит следующим образом:

CXX = g++ -std=c++11
INCLUDES =
LIBS = -L../hwloc 
CXXFLAGS = -Wall -g -pthread
OBJS = xPlatST.o stdafx.o

xPlatST: ${OBJS}
    ${CXX} ${CXXFLAGS} ${INCLUDES} -c $@ ${OBJS} ${LIBS}

clean:
    -rm xPlatST *.o

Любая помощь будет принята с благодарностью; заранее спасибо.

1 Ответ

0 голосов
/ 08 мая 2018

Ваше предположение верно. Ваш рецепт пытается использовать xPlatST в качестве источника. Измените -c на -o в вашем правиле:

${CXX} ${CXXFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS}

Флаг -c указывает компилятору взять все файлы, скомпилировать и собрать их в объектный файл (.o). Флаг -o указывает файл назначения.

...