相同GTK C代码在Makefile与直接编译下窗口可调整性异常排查
GTK窗口设置不可调整大小失效问题
正常情况(单独编译代码)
我有如下test.c代码:
#include <gtk/gtk.h> #define UNUSED(x) (void)(x) static void activate(GtkApplication* app, gpointer user_data) { GtkWidget* window; UNUSED(user_data); window = gtk_application_window_new(app); gtk_window_set_title(GTK_WINDOW(window), "Window"); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); gtk_widget_show_all(window); } int main(int argc, char** argv) { GtkApplication* app; int status; app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE); g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status; }
使用以下命令编译:
gcc -o app test.c `pkg-config --cflags --libs gtk+-3.0`
编译运行后,窗口不可调整大小,符合代码预期。
异常情况(项目环境下编译)
将上述代码放入项目的main.c文件中,使用如下Makefile编译:
CC = gcc CFLAGS = -Wall -Wextra -Werror CPPFLAGS = -MMD -Isrc -Isrc/libdb -Isrc/libsqlite3 SRCDIR = src OBJDIR = obj/src BINDIR = bin OBJINT = obj/libint OBJDB = obj/db OBJSQLITE3 = obj/sqlite3 PKG-CONFIG = `pkg-config --cflags --libs gtk+-3.0` TARGET = $(BINDIR)/todo SRCS_INT = $(SRCDIR)/libint/interface.c $(SRCDIR)/libint/interface.h SRCS_MAIN = $(SRCDIR)/todolist/main.c SRCS_LIB_DB = $(SRCDIR)/libdb/db.c $(SRCDIR)/libdb/db.h SRCS_LIB_SQLITE3 = $(SRCDIR)/libsqlite3/sqlite3.c $(SRCDIR)/libsqlite3/sqlite3.h $(SRCDIR)/libsqlite3/sqlite3ext.h OBJS_LIB_INT = $(OBJINT)/interface.o OBJS_MAIN = $(OBJDIR)/main.o OBJS_LIB_DB = $(OBJDB)/db.o OBJS_LIB_SQLITE3 = $(OBJSQLITE3)/sqlite3.o DEPS = $(OBJS_MAIN:.o=.d) $(OBJS_LIB_DB:.o=.d) $(OBJS_LIB_SQLITE3:.o=.d) $(OBJS_LIB_INT:.o=.d) # Rule for building the executable file $(TARGET): $(OBJS_MAIN) $(OBJDB)/libdb.a $(OBJSQLITE3)/libsqlite3.a $(OBJINT)/libint.a $(CC) $(CFLAGS) $^ -o $@ -lm $(PKG-CONFIG) # Rule for building the static libraries $(OBJDB)/libdb.a: $(OBJS_LIB_DB) ar rcs $@ $^ $(OBJSQLITE3)/libsqlite3.a: $(OBJS_LIB_SQLITE3) ar rcs $@ $^ $(OBJINT)/libint.a: $(OBJS_LIB_INT) ar rcs $@ $^ # Rules for building object files $(OBJS_MAIN): $(SRCS_MAIN) $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ $(PKG-CONFIG) $(OBJS_LIB_DB): $(SRCS_LIB_DB) $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ $(OBJS_LIB_SQLITE3): $(SRCS_LIB_SQLITE3) $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ $(OBJS_LIB_INT): $(SRCS_INT) $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ $(PKG-CONFIG) .PHONY: clean clear: rm -f $(TARGET) $(OBJS_MAIN) $(OBJS_LIB_DB) $(OBJS_LIB_SQLITE3) $(OBJS_LIB_INT) obj/src/*.o obj/src/*.d obj/db/*.o \ obj/db/*.d obj/db/*.a obj/sqlite3/*.o obj/sqlite3/*.d obj/sqlite3/*.a obj/libint/*.o obj/libint/*.d obj/libint/*.a -include $(DEPS) run: $(TARGET) sudo ./$(TARGET)
编译运行后,窗口仍然可以调整大小,尽管代码里已经设置了gtk_window_set_resizable(FALSE)。我尝试修改Makefile但没有解决问题,甚至使用简易Makefile也存在同样的问题。
更新:make编译输出
gcc -c -Wall -Wextra -Werror -MMD -Isrc -Isrc/libdb -Isrc/libsqlite3 src/todolist/main.c -o obj/src/main.o `pkg-config --cflags --libs gtk+-3.0` gcc -c -Wall -Wextra -Werror -MMD -Isrc -Isrc/libdb -Isrc/libsqlite3 src/libdb/db.c -o obj/db/db.o ar rcs obj/db/libdb.a obj/db/db.o gcc -c -Wall -Wextra -Werror -MMD -Isrc -Isrc/libdb -Isrc/libsqlite3 src/libsqlite3/sqlite3.c -o obj/sqlite3/sqlite3.o ar rcs obj/sqlite3/libsqlite3.a obj/sqlite3/sqlite3.o gcc -c -Wall -Wextra -Werror -MMD -Isrc -Isrc/libdb -Isrc/libsqlite3 src/libint/interface.c -o obj/libint/interface.o `pkg-config --cflags --libs gtk+-3.0` ar rcs obj/libint/libint.a obj/libint/interface.o gcc -Wall -Wextra -Werror obj/src/main.o obj/db/libdb.a obj/sqlite3/libsqlite3.a obj/libint/libint.a -o bin/todo -lm `pkg-config --cflags --libs gtk+-3.0`
问题出在哪里?
内容的提问来源于stack exchange,提问作者talinuss
相关产品推荐
相关产品推荐

