Wie hinzufügen von compiler-Argumente mit CMake?

Habe ich mit dem Clion IDE und versuche, ein einfaches GTK-Programm zu kompilieren, es zu benutzen. Ich habe festgestellt, dass Clion verwendet CMake, so sind die Themen hier eher als mit der IDE selbst. Ich bin in der Lage, erfolgreich zu kompilieren und führen Sie das Programm direkt vom terminal, aber die haben schon erfolglos mit CMake.

Das problem ist einfach: wenn ich versuche zu kompilieren, der compiler kann nicht finden gtk.h, die sich in /usr/include/gtk-3.0/gtk/gtk.h. Ich habe festgestellt, dass irgendwie der Befehl compiler-argument 'pkg-config --libs --cflags gtk+-3.0' behebt dieses problem, aber ich habe nicht in der Lage gewesen, um dieses argument mit CMake.

Habe ich versucht:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} `pkg-config --libs --cflags gtk+-3.0`")

Aber bin erfüllt mit:

Linking CXX executable test
c++: error: `pkg-config: No such file or directory
c++: error: gtk+-3.0`: No such file or directory
c++: error: unrecognized command line option ‘--libs
c++: error: unrecognized command line option ‘--cflags
make[3]: *** [test] Error 1
make[2]: *** [CMakeFiles/test.dir/all] Error 2
make[1]: *** [CMakeFiles/test.dir/rule] Error 2
make: *** [test] Error 2

Irgendwelche Vorschläge?


Weitere Forschung hat gezeigt, diese tutorial genau auf das Problem, das ich habe. Es funktioniert wie ein Charme, aber das erscheint zu werfen viele scheinbar undefinierten Variablen in den mix. Kann mir jemand erklären, wie und warum das funktioniert?

# Set the name and the supported language of the project
project(hello-world C)
# Set the minimum version of cmake required to build this project
cmake_minimum_required(VERSION 2.6)
# Use the package PkgConfig to detect GTK+ headers/library files
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
# Setup CMake to use GTK+, tell the compiler where to look for headers
# and to the linker where to look for libraries
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
# Add other flags to the compiler
add_definitions(${GTK3_CFLAGS_OTHER})
# Add an executable compiled from hello.c
add_executable(hello main.c)
# Link the target to the GTK+ libraries
target_link_libraries(hello ${GTK3_LIBRARIES})
  • Ich weiß es nicht, aber wenn Sie das tun bekommen Ihre Antwort, Hinweis: die include-Pfad und pkg-config-Linie nicht übereinstimmen. Möchten Sie die Verwendung von GTK+ 2 oder GTK+ 3? Dies wird wichtig sein, um Probleme zu vermeiden später.
  • Danke. Ich fest, dass. Ich kopierte die Zeichenfolge, aus der eine website mit 2.0 und vergessen, zu Bearbeiten, zu reflektieren 3.0.
  • Sie haben /usr/include im PATH (Umwelt -) variable? Das ist überhaupt nicht nützlich.
  • Ich muss mich wohl geirrt, als ich schrieb, und möglicherweise dachte über /usr/local... Ich weiß, dass zum Beispiel iostream befindet sich bei /usr/include/c++... Wenn ein solches Verzeichnis ist nicht im PFAD ist, wie der compiler wissen, wo diese Header?
  • PATH wird von der shell benutzt, für die Suche nach binaries. Der compiler verwendet eine eingebaute Standorte und Orte, gekennzeichnet durch die -I Flagge.
  • Ist http://www.cmake.org/cmake/help/v3.0/module/FindPkgConfig.html hier helfen?
  • Sie brauchen nicht die link_directories nennen, wenn Sie _LDFLAGS statt LIBRARIES

InformationsquelleAutor sherrellbc | 2014-12-16
Schreibe einen Kommentar