2017-01-24 4 views
-2

Все библиотеки и зависимости корректно установлены в моем Linux-окне. я могу скомпилировать свою тестовую программу с libwnck-3.0 в простом макияжем файле:Как интегрировать libwnck-3.0 в 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 

... 

дело в том, что для компиляции и компоновки libwnck-3,0 мне нужно использовать: pkg-config --cflags -libs libwnck-3.0

компилятор G ++ компилируется и свяжите мою программу без проблем. Но как я могу сделать это с помощью autotools Makefile.am?

здесь образец 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; 

} 

и здесь 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` 

после выполнения autogen.sh, ./configure и сделать, он компилирует gtkmm но я получаю сообщение об ошибке: undefine ссылка на wnck_screen_get_default() Компилятор не может найти пакет libwnck-3.0. ; О (

Я пытаюсь много вариаций и тратить дни на Google без успеха

Спасибо заранее за любую помощь

ответ

1

Вы должны использовать PKG_CHECK_MODULES, чтобы проверить на наличие необходимых библиотек,.! и просто использовать WNCK_LIBS и WNCK_CFLAGS связать его.

конечно, вы должны использовать _LDADD, а не _LDFLAGS передать библиотеки, как те, имеют различную семантику.

+0

Да, PKG_CHECK_MODULES решает проблему. Благодаря! ; o) – yoo

+0

Будьте осторожны с PKG_CHECK_MODULES, хотя использование его неправильно затруднит пользователям перекрестную компиляцию вашей программы или библиотеки (т. е. компиляцию и привязку к версиям зависимостей, отличных от тех, которые были установлены диспетчером вашей ОС) – Gunee

Смежные вопросы