Возникли проблемы с включением sqlite3 в мой проект, makefile не делает то, что я хочу - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь сделать простое приложение базы данных для личного использования, используя sqlite3. Я хочу хранить рецепты и искать их по ингредиентам.

Я собрал make-файл для сборки проекта, но компоновщик не может найти файлы sqlite3.c и sqlite3.h

Это мой make-файл

TARGET = main
CC = gcc
CFLAGS = -std=c99 -Wall -I /home/jamie/sqlite/sqlite3 -pthread
HEADERS = sqlite3.h
SOURCES =  main.c sqlite3.c

.PHONY: compile clean

#Compile all the files. The default target
compile:
        $(CC) $(CFLAGS) $(SOURCES) $(HEADERS) -o $(TARGET)


#Remove all files that are produced after compilation
clean:
        -rm -f *.o $(TARGET)

Это моя структура каталогов

jamie@jamie-VirtualBox:~/sqlite$ tree
.
├── chinook
│   └── chinook.db
├── recipes
│   ├── creator.txt
│   ├── main.c
│   ├── Makefile
│   └── recipeDB.db
├── sqlite3
│   ├── aclocal.m4
│   ├── compile
│   ├── config.guess
│   ├── config.log
│   ├── config.status
│   ├── config.sub
│   ├── configure
│   ├── configure.ac
│   ├── depcomp
│   ├── INSTALL
│   ├── install-sh
│   ├── libsqlite3.la
│   ├── libtool
│   ├── ltmain.sh
│   ├── Makefile
│   ├── Makefile.am
│   ├── Makefile.fallback
│   ├── Makefile.in
│   ├── Makefile.msc
│   ├── missing
│   ├── README.txt
│   ├── Replace.cs
│   ├── shell.c
│   ├── sqlite3
│   ├── sqlite3.1
│   ├── sqlite3.c
│   ├── sqlite3ext.h
│   ├── sqlite3.h
│   ├── sqlite3.lo
│   ├── sqlite3.o
│   ├── sqlite3.pc
│   ├── sqlite3.pc.in
│   ├── sqlite3.rc
│   ├── sqlite3-shell.o
│   ├── sqlite3-sqlite3.o
│   ├── tea
│   │   ├── aclocal.m4
│   │   ├── configure
│   │   ├── configure.ac
│   │   ├── doc
│   │   │   └── sqlite3.n
│   │   ├── generic
│   │   │   └── tclsqlite3.c
│   │   ├── license.terms
│   │   ├── Makefile.in
│   │   ├── pkgIndex.tcl.in
│   │   ├── README
│   │   ├── tclconfig
│   │   │   ├── install-sh
│   │   │   └── tcl.m4
│   │   └── win
│   │       ├── makefile.vc
│   │       ├── nmakehlp.c
│   │       └── rules.vc
│   └── test.c
└── sqlite-tools-linux-x86-3260000
    ├── sqldiff
    ├── sqlite3
    └── sqlite3_analyzer

9 directories, 58 files

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

jamie@jamie-VirtualBox:~/sqlite/recipes$ make
gcc -std=c99 -Wall -I /home/jamie/sqlite/sqlite3 -pthread main.c sqlite3.c sqlite3.h -o main
gcc: error: sqlite3.c: No such file or directory
gcc: error: sqlite3.h: No such file or directory
Makefile:11: recipe for target 'compile' failed
make: *** [compile] Error 1
jamie@jamie-VirtualBox:~/sqlite/recipes$ 

А в main.c у меня есть следующее:

#include "sqlite3.h"

1 Ответ

0 голосов
/ 06 января 2019

-I влияет только на путь поиска для директив #include. Это не влияет на расположение исходных файлов, указанных в командной строке. На уровне makefile вам также необходимо использовать полные пути для заголовочных файлов (если вы будете использовать их в зависимостях в будущем):

HEADERS = sqlite3/sqlite3.h
SOURCES =  main.c sqlite3/sqlite3.c

Вы также не должны пытаться скомпилировать файл заголовка, поэтому удалите переменную $(HEADERS) из вызова компилятора:

compile:
        $(CC) $(CFLAGS) $(SOURCES) -o $(TARGET)
...