我在Debian Jessie下构建的C项目有问题。现在做了一些事后我需要使用MySQL,所以我下载了库并尝试更新我的Makefile。
这是我现在的 Makefile
CC = gcc
CFLAGS = -Wall -Wextra
LDFLAGS = -lbluetooth -lpthread -lmysqlclient
LFLAGS = -lm
INC = -I/usr/include/mysql
SOURCES = stb.c btscan.c and.c gima.c database.c
OBJECTS = $(SOURCES:.c=.o)
EXECUTABLE = stb
$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $@ $(LFLAGS) $(LDFLAGS)
stb.o: btscan.h and.h gima.h database.h
btscan.o: btscan.h
and.o: and.h
gima.o: gima.h
database.o: database.h
clean:
@rm -f *.o *.out stb
这是我想要使用库的文件
stb.c
#include "btscan.h"
#include "and.h"
#include "gima.h"
#include "database.h"
struct device* bt_devices;
struct device* ble_devices;
int main(void) {
//-------------------------------- DATABASE CONNECTION ----------------
//MYSQL *con = mysql_init(NULL);
....... }
最后 database.h
#ifndef _DATABASE_H
#define _DATABASE_H
#include <my_global.h>
#include <mysql.h>
#endif
当我试图让我收到&#34;致命错误:my_global.h没有这样的文件或目录&#34;。但是,如果我在单个测试文件上尝试MySQL并使用
进行编译gcc -o test test.c -I/usr/include/mysql -lmysqlclient
它有效。我犯了哪个错误?
提前致谢
答案 0 :(得分:0)
如果您向我们展示了编译器的输出,或者自己检查它,您会立即看到您在命令行上运行的内容与make正在运行的内容完全不同:特别是make没有将-I/usr/include/mysql
标志添加到命令行。
那是因为在你的makefile中你设置了:
INC = -I/usr/include/mysql
但你的makefile中没有任何地方(如你所示)是实际使用的变量INC
,所以这实际上是一个无操作。
由于您使用的是标准GNU make编译规则,因此您应该设置标准GNU make变量:
CPPFLAGS = -I/usr/include/mysql