2017-03-22 35 views
0

我试图连接在一个GTK构件的信号使用格莱德与gtk_builder_connect_signals() 提出,由于该文件说,这一功能需要与-Wl,--export-dynamic CFLAGS编译和反对gmodule-export-2.0链接的程序。

使用以下命令编译此代码成功。配置克利翁处理gtk_builder信号

/*Command : gcc sample.c -Wall -Wextra -Wl,--export-dynamic `pkg-config --cflags --libs gtk+-3.0 gmodule-export-2.0` -o sample */ 
#include <gtk/gtk.h> 

void add_etdnts(GtkWidget *widget,gpointer data){ 
    g_print("function succefully called"); 
} 

int main(int argc, char *argv[]){ 
GtkBuilder *builder; 

GtkWidget *window; 
GError *error = NULL; 

gtk_init(&argc,&argv); 

builder = gtk_builder_new(); 

if(! gtk_builder_add_from_file(builder,"style.glade",&error)){ 
    g_warning("%s",error->message); 
    g_free(error); 
    return 1; 
} 
window = GTK_WIDGET(gtk_builder_get_object(builder,"window")); 
gtk_builder_connect_signals(builder,NULL); 

g_object_unref(G_OBJECT(builder)); 

gtk_widget_show(window); 

//Start main loop 
gtk_main(); 
return 0; 
} 

但由于某些原因,即使添加了以下行 “的CMakeLists.txt”

cmake_minimum_required(VERSION 3.6) 
project(UI) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
find_package(GTK 3 REQUIRED gtk) 

if(GTK3_FOUND) 
include_directories(${GTK3_INCLUDE_DIRS}) 
set(SOURCE_FILES main.c main.h) 
add_executable(UI ${SOURCE_FILES}) 
target_link_libraries(UI ${GTK3_LIBRARIES}) 

    ############# something is wrong here ############## 
set(CMAKE_CXX_COMPILER "pkg-config --cflags --libs gtk+-3.0 gmodule-2.0") 
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} pkg-config --libs gtk+-3.0 gmodule-2.0") 
endif() 

Errors interpreted on building

后,我无法编译它下的克利翁IDE(LINUX)

回答

1
set(CMAKE_CXX_COMPILER "pkg-config --cflags --libs gtk+-3.0 gmodule-2.0") 

这没有意义:您已将pkg-config设置为您的C++编译器。

使用pkg-config support在CMake的:

find_package(PkgConfig) 
pkg_check_modules(GTK REQUIRED gtk+-3.0 gmodule-2.0) 
... 
target_link_libraries(UI ${GTK_LIBRARIES}) 
target_include_directories(UI ${GTK_INCLUDE_DIRS})