2017-01-24 3 views
-2

Alle libs und Abhängigkeiten sind korrekt auf meiner Linux-Box installiert. Ich kann mein Testprogramm mit libwnck-3.0 in einer einfachen Make-Datei kompilieren:wie libwnck-3.0 in autotools zu integrieren 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 

... 

der Punkt, dass ist zu kompilieren und Link libwnck-3.0 i verwenden müssen: pkg-config --cflags -libs libwnck-3.0

der g ++ Compiler kompiliert und verlinke mein Programm ohne Probleme. Aber wie kann ich das mit Autotools Makefile.am tun?

hier das main.cpp Beispiel:

#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; 

} 

und hier der Automake Test 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` 

nach Laufe autogen.sh, configure und macht es kompiliert gtkmm aber ich erhalte einen Verbindungsfehler: undefine Verweisung zu wnck_screen_get_default() Der Linker kann das libwnck-3.0 Paket nicht finden. ; O (

Ich habe versucht, ohne Erfolg viele Variationen und verbringen Tage auf Google

Sie für jede Hilfe im Voraus Vielen

Antwort

1

Sie sollten PKG_CHECK_MODULES verwenden für das Vorhandensein der benötigten Bibliotheken zu überprüfen.! und verwenden nur WNCK_LIBS und WNCK_CFLAGS es zu verknüpfen in.

natürlich sollten Sie _LDADD und nicht _LDFLAGS, um die Bibliotheken übergeben, wie die unterschiedliche Semantik haben.

+0

ja, PKG_CHECK_MODULES lösen das Problem. Vielen Dank! ; o) – yoo

+0

Seien Sie vorsichtig mit PKG_CHECK_MODULES, aber wenn Sie es falsch benutzen, wird es für Benutzer sehr schwierig sein, Ihr Programm oder Ihre Bibliothek zu kompilieren (zB Kompilieren und Verknüpfen mit Versionen anderer Abhängigkeiten als denen, die von Ihrem Paketmanager installiert wurden) – Gunee

Verwandte Themen