2017-01-24 3 views
-2

Toutes les libs et dépendances sont correctes installées sur ma machine linux. je peux compiler mon programme de test avec libwnck-3.0 dans un simple fichier make:comment intégrer libwnck-3.0 dans les autotools makefile.am

LDFLAGS = -lX11 `pkg-config --cflags --libs gtkmm-3.0 libwnck-3.0 ` 
CPPFLAGS = -g -Wall -Wno-reorder -std=c++11 `pkg-config --cflags gtkmm-3.0 libwnck-3.0` 

OUTPUTDIR = bin 

# Macro that uses the backslash to extend to multiple lines. 
OBJS = \ 
main.o \ 
$(NULL) 

all:$(OBJS) 
    $(CC) $(CPPFLAGS) -o$(OUTPUTDIR)/$(APPNAME) $(OBJS) $(LDFLAGS) 

main.o:main.cpp 
     $(CC) -I$(INCLUDE) $(CPPFLAGS) -c main.cpp 

... 

le point est que pour compiler et lier libwnck-3.0 que je dois utiliser: pkg-config --cflags -libs libwnck-3.0

le compilateur g ++ compilera et reliez mon programme sans problèmes. Mais comment je peux le faire avec Autotools Makefile.am?

ici l'échantillon main.cpp:

#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1 

#include <libwnck/libwnck.h> 
#include <gtkmm.h> 

int main(int argc, char *argv[]) 
{ 
    gdk_init (&argc, &argv); 

    //check if libwnck works  
    WnckScreen* wnckscreen = wnck_screen_get_default(); 

    Gtk::Main kit(argc, argv); 
    Gtk::Window mainWindow; 
    Gtk::Button button("Click here"); 
    mainWindow.set_title("GTKmm Demo"); 
    mainWindow.set_border_width(4); 
    mainWindow.set_default_size(200, 50); 
    mainWindow.add(button); 
    button.show(); 
    Gtk::Main::run(mainWindow); 



    return 0; 

} 

et ici le test Automake Makefile.am:

bin_PROGRAMS = testprogram 
testprogram_SOURCES = main.cpp 
# that is for gtkmm 
testprogram_CPPFLAGS = $(GTKMM_CFLAGS) 
# the include for libwnck-3.0 
testprogram_CPPFLAGS += -I/usr/include/libwnck-3.0 
testprogram_CPPFLAGS = $(GTKMM_CFLAGS) 
# Linker flags 
testprogram_LDFLAGS =`pkg-config --cflags --libs gtkmm-3.0 libwnck-3.0` 

après l'exécution autogen.sh, ./configure et faire, il compile gtkmm mais j'obtiens une erreur de lien: référence undefine à wnck_screen_get_default() L'éditeur de liens ne peut pas trouver le package libwnck-3.0. ; O (

J'ai essayé plusieurs variations et passer des jours sur Google sans succès

Nous vous remercions d'avance pour toute aide

Répondre

1

Vous devez utiliser PKG_CHECK_MODULES pour vérifier la présence des bibliothèques nécessaires,.! et il suffit d'utiliser WNCK_LIBS et WNCK_CFLAGS pour le lier à.

Bien sûr, vous devez utiliser _LDADD, et non _LDFLAGS passer les bibliothèques, comme celles-ci ont une sémantique différente.

+0

oui, PKG_CHECK_MODULES résoudre le problème. Merci! ; o) – yoo

+0

Attention cependant à PKG_CHECK_MODULES, si vous l'utilisez incorrectement, il sera très difficile pour les utilisateurs de compiler votre programme ou votre bibliothèque (compilation et liaison avec des versions de dépendances autres que celles installées par votre gestionnaire de paquets) – Gunee