【发布时间】:2015-06-01 23:10:47
【问题描述】:
我正在用 C 语言为 Windows 和 linux 编写一个跨平台的 gtk 应用程序。今天我遇到了标题中奇怪的编译器错误(我以前从未见过)。
当我在 Windows 中构建程序时会发生这种情况,而不是在 Linux 中。当我通过命令行在 Windows 中构建它时,此消息显示为警告并且程序编译成功。但是,当我在代码块中构建它时,此消息显示为错误并且无法编译。
这是我的 makefile 中的内容:
ifeq ($(OS),Windows_NT)
CC = mingw32-gcc
BIN = "bin\"
DIRCHK = if exist bin rd /s /q bin
CPGLADE = copy main_win.glade bin\Release
RM = rmdir /S /Q bin
SQLITE = -dll sqlite3.dll
DLL = copy /Y sqlite3.dll bin\Debug && copy /Y sqlite3.dll bin\Release
else
CC = gcc
BIN = -vp bin/
RM = rm -rf bin
SQLITE = -l sqlite3 -ldl -lpthread
DLL = rm -f sqlite3.dll
endif
SHELL = bash
GTK := $(shell pkg-config --cflags --libs gtk+-3.0)
CFLAGS := -g -Wall -static-libgcc -lm $(GTK) $(SQLITE)
TARGET = deans2
all:
$(DIRCHK)
mkdir $(BIN)Debug
mkdir $(BIN)Release
$(CPGLADE)
$(CC) main.c $(CFLAGS) -o bin/Release/$(TARGET)
$(DLL)
Debug:
$(DIRCHK)
mkdir $(BIN)Debug
$(CPGLADE)
$(CC) main.c $(CFLAGS) -o bin/Debug/$(TARGET)
$(DLL)
Release:
$(DIRCHK)
mkdir $(BIN)Release
$(CPGLADE)
$(CC) main.c $(CFLAGS) -o bin/Release/$(TARGET)
$(DLL)
clean:
$(RM)
【问题讨论】:
-
向我们展示产生错误的命令行。
-
可能是错误
unrecognized debugging option: l(字母l不是数字1)?因为-dll不是gcc的有效标志,我知道并且会导致我相信的错误(来自CFLAGS中使用的SQLITE的值,然后在$(CC)行中构建时窗户)。 -
@EtanReisner 这似乎成功了。我不确定为什么我以前使用该标志,但现在我正在使用 SQLite 文档中指定的完整合并进行构建。感谢和抱歉这个愚蠢的问题!
标签: c gcc compiler-errors makefile cross-platform