2016-05-18 15 views
2

Ich benutze Debian 8 und habe libgtkmm-3.0 (und auch -dev) installiert. Jetzt habe ich ein sehr einfaches Programm gtkmm verwenden, im Grunde ein Hallo Welt:CMake Fehler mit GTKmm

main.cpp:

#include "../include/BrowserWindow.class.hpp" 
#include <gtkmm/application.h> 

int main(int argv, char *argc[]) 
{ 
    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); 

    BrowserWindow helloworld; 

    //Shows the window and returns when it is closed. 
    return app->run(helloworld); 
} 

BrowserWindow.class.cpp:

#include "../include/BrowserWindow.class.hpp" 
#include <iostream> 

BrowserWindow::BrowserWindow() 
: m_button("Hello World") 
{ 
    set_border_width(10); 

    m_button.signal_clicked().connect(sigc::mem_fun(*this, &BrowserWindow::on_button_clicked)); 

    add(m_button); 

    m_button.show(); 
} 

BrowserWindow::~BrowserWindow() 
{ 
} 

void BrowserWindow::on_button_clicked() 
{ 
    std::cout << "Hello World" << std::endl; 
} 

BrowserWindow.class.hpp:

#ifndef VB_BROWSERWINDOW_CLASS_H 
#define VB_BROWSERWINDOW_CLASS_H 

#include <gtkmm/button.h> 
#include <gtkmm/window.h> 

class BrowserWindow : public Gtk::Window 
{ 

public: 
    BrowserWindow(); 
    virtual ~BrowserWindow(); 

protected: 
    void on_button_clicked(); 

    Gtk::Button m_button; 
}; 
#endif 

Nun, wenn ich es manuell oder mit einem selbst erstellten Makefile kompilieren, mit pkg-config gtkmm-3.0 --cflags ein d pkg-config gtkmm-3.0 --libs, alles funktioniert gut. Mit CMake bekomme ich jedoch Kompilierungsfehler. cmake Laufen ist in Ordnung:

-- The C compiler identification is GNU 4.9.2 
-- The CXX compiler identification is GNU 4.9.2 
-- Check for working C compiler: /usr/bin/cc 
-- Check for working C compiler: /usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.28") 
-- checking for module 'gtkmm-3.0' 
-- found gtkmm-3.0, version 3.14.0 
-- Configuring done 
-- Generating done 
-- Build files have been written to: bla/bla/build 

Lauf, das Problem ist jetzt:

projectdir/hardsource/main.cpp: In function ‘int main(int, char**)’: 
projectdir/hardsource/main.cpp:6:102: error: no matching function for call to ‘Gtk::Application::create(char**&, int&, const char [18])’ 
     Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); 

von einigen potenziellen "Kandidaten" von Funktionen folgt ich gemeint haben könnte ...

Die CMakeLists.txt :

cmake_minimum_required(VERSION 3.0.2) 
project(myproject) 

find_package(PkgConfig) 
pkg_check_modules(GTKMM gtkmm-3.0) 

link_directories(${GTKMM_LIBRARY_DIRS}) 
include_directories(include ${GTKMM_INCLUDE_DIRS}) 

file(GLOB SOURCES "hardsource/*.cpp") 

add_executable(mybinary ${SOURCES}) 

target_link_libraries(mybinary ${GTKMM_LIBRARIES}) 

I Compiler-Flags verglichenen (enthalten sowie lib) mit manueller PKG-conf erzeugt ig und der von cmake's pkg-config generierte. Beide sind identisch.

Also, was ist los? :/

Antwort

2

Sie haben argc und argv in Ihrer Hauptfunktion ausgetauscht. Wechsel:

int main(int argv, char *argc[]) 

in

int main(int argc, char *argv[]) 

Siehe What does int argc, char *argv[] mean?

Als Randbemerkung, bezweifle ich, es war wirklich mit einem selbstgemachten Makefile arbeiten. Vielleicht hast du nicht wirklich alle Dateien kompiliert.