Hilfe bei cmake

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Gesperrt
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Hilfe bei cmake

Beitrag von slash-ex »

Ich möchte gerne ein kleines KDE-Plugin schreiben. Aber mir steht dabei cmake im Weg. Ich habe mir dazu über einige Makefiles recht umständlich aus dem smartdimmerprogramm eine Library gemacht. Diese Lib nenne ich libsmartdimmer.a und ist im projektunterordner lib_smartdimmer.

Nun wollte ich auf Basis des Beispiel CMakeLists.txt Files diese Lib dazulinken. Aber ich bekomme leider einen nervigen Feher:

Code: Alles auswählen

CMakeFiles/plasma_applet_tutorial1.dir/PopUp.o: In function `DimmerPopUp::sl_dispValue(int)':
/home/Xerces/devel/dimmer_applet/PopUp.cpp:57: undefined reference to `sd_set_level(int)'
collect2: ld returned 1 exit status

Code: Alles auswählen

# Project Needs a name ofcourse
project(plasma-tutorial1)

add_subdirectory (smartdimmer_lib) <= NEU
LINK_LIBRARIES(libsmartdimmer.a) <=NEU

# Find the required Libaries
find_package(KDE4 REQUIRED)
include(KDE4Defaults)
find_package(Plasma REQUIRED)
 
add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS})
include_directories(
   ${CMAKE_SOURCE_DIR}
   ${CMAKE_BINARY_DIR}
   ${KDE4_INCLUDES}
   )
 
# We add our source code here
set(tutorial1_SRCS plasma-tutorial1.cpp PopUp.cpp)
 
# Now make sure all files get to the right place
kde4_add_plugin(plasma_applet_tutorial1 ${tutorial1_SRCS})
target_link_libraries(plasma_applet_tutorial1 
                      ${PLASMA_LIBS} ${KDE4_KDEUI_LIBS})
 
install(TARGETS plasma_applet_tutorial1
        DESTINATION ${PLUGIN_INSTALL_DIR})
 
install(FILES plasma-applet-tutorial1.desktop
        DESTINATION ${SERVICES_INSTALL_DIR}) 
Ich habe cmake bisher noch nie benutzt. Irgendwas muss ich wohl falsch machen. Ich hoffe nur, dass der Fehler nicht an der Lib selbst liegt, aber die Größe scheint zu passen (76kb)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wo ist sd_set_level definiert? Gegen die Lib musst du linken.
Was soll "LINK_LIBRARIES(libsmartdimmer.a)" bringen?
Schau Dir mal die CMake-Doku an (http://www.cmake.org/Wiki/CMake)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

genau diese funktion soll doch in der lib stehen, die ich versuche einzubinden.
das problem ist folgendes: ich kenne mich mit cmake nicht gut aus und die doku bzw. das beispiel file auf der seite ist scheiße.

die ordnerstruktur ist folgende:
ich habe einen ordner namens backend, in dem zig dateien sind dann alle zusammen eine lib bilden.
diese lib wird dann von einer header namens smartdimmer benutzt, welche dann auch eine lib bildet.
und zum schluss soll auf basis dieser lib dann das plugin (welches eigentlich fertig ist) übersetzt werden.

dummerweise, kenne ich mich mit cmake schlechter als mit make aus.

ich habe mal auf dieser basis versucht den ordner backend zu übersetzen, aber allein die pure tatsache, dass ich dort zig datein quasi einzeln übersetzen müsste und nicht weis wie ich die objekte zusammensetze macht die sache scheiße.

Code: Alles auswählen

# Create a library called "Hello" which includes the source file "hello.cxx".
# The extension is already found. Any number of sources could be listed here.
add_library (Hello hello.cxx)

Finally, in the ./Demo directory, the third and final CMakeLists.txt file is created:

# Make sure the compiler can find include files from our Hello library.
include_directories (${HELLO_SOURCE_DIR}/Hello)

# Make sure the linker can find the Hello library once it is built.
link_directories (${HELLO_BINARY_DIR}/Hello)

# Add executable called "helloDemo" that is built from the source files
# "demo.cxx" and "demo_b.cxx". The extensions are automatically found.
add_executable (helloDemo demo.cxx demo_b.cxx) 
dann habe ich mal was anderes gefunden, was evtl zu meinen prob passt:

Code: Alles auswählen

PROJECT(ZLIB)
# source files for zlib
SET(ZLIB_SRCS
adler32.c   gzio.c      
inftrees.c  uncompr.c
compress.c  infblock.c
infutil.c   zutil.c
crc32.c     infcodes.c 
deflate.c   inffast.c  
inflate.c   trees.c
)
ADD_LIBRARY(zlib ${ZLIB_SRCS})
ADD_EXECUTABLE(example example.c)
TARGET_LINK_LIBRARIES(example zlib)
aber auch hier findet man im inet nur scheiße. ich will keine absoluten pfade für meine unterordnerangeben, sondern dynamisch alle unterordner durchlaufen. aber man findet nix.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Deine Ausdrucksweise ist mir zuwieder -> closed!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Gesperrt