如何将 libwnck-3.0 集成到 autotools makefile.am 中

how to integrate libwnck-3.0 in autotools makefile.am

本文关键字:autotools makefile am 集成 libwnck-3      更新时间:2023-10-16

所有库和依赖项都正确安装在我的 Linux 盒子上。 我可以在一个简单的制作文件中使用 libwnck-3.0 编译我的测试程序:

 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++ 编译器将毫无问题地编译和链接我的程序。但是我如何使用自动工具 Makefile.am 做到这一点?

以下是主要.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;
}

在这里,自动制作测试 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 和 make 后,它编译 gtkmm,但我收到一个链接错误:取消定义对 wnck_screen_get_default() 的引用链接器找不到 libwnck-3.0 包。;o(

我尝试了很多变化,并在谷歌上花费了几天没有成功。

提前感谢您的任何帮助!

您应该使用

PKG_CHECK_MODULES 来检查所需库是否存在,只需使用 WNCK_LIBSWNCK_CFLAGS 将其链接即可。

当然,您应该使用 _LDADD ,而不是_LDFLAGS来传递库,因为它们具有不同的语义。