make->cmake; Neueinstieg mit cmake und Projektumstellung



  • Ich habe ein Makefile erstellt, welches einen Ordner voller *c und *h -Dateien in eine Library linkt.

    CC=gcc
    AR=ar
    RANLIB=ranlib
    system=Linux
    OBJECTS=backend.o bios.o config.o error.o nv30.o nv31.o nv40.o info.o overclock.o i2c.o xf86i2c.o lm99.o f75375.o w83l785r.o libc_wrapper.o
    CFLAGS=
    
    ifeq ($(system), FreeBSD)
        OBJECTS+=back_bsd.o
    else
        ifeq ($(system), Win32)
    	OBJECTS+=back_win32.o
        else
    	OBJECTS+=back_linux.o
        endif
    endif
    
    .PHONY: clean distclean
    all: libbackend.a
    
    libbackend.a: $(OBJECTS)
    	$(AR) cru libbackend.a $(OBJECTS)
    	$(RANLIB) libbackend.a
    
    clean:
    	rm -f *.o *.a
    
    distclean: clean
    	rm -f Makefile
    
    install:
    uninstall:
    

    Dann habe ich einen Ordner, welcher auf Basis dieser Library eine 2. erstellen sollte:

    CC=gcc
    AR=ar
    RANLIB=ranlib
    system=Linux
    
    SOURCES=smartdimmer.c
    SUBDIRS=backend
    libbackend=./backend/libbackend.a
    
    DEPS=$(libbackend)
    INCLUDES=-I./backend -I..
    LIBS=-L./backend -lbackend
    
    OBJECTS=smartdimmer.o ./backend/libbackend.a
    
    .PHONY: all-recursive clean distclean
    all: all-recursive smartdimmer.o libsmartdimmer.a
    
    smartdimmer.o: $(LIB) smartdimmer.c
    	$(CC) -c smartdimmer.c $(SOURCES) $(INCLUDES) $(LIBS)
    
    libsmartdimmer.a: $(OBJECTS)
    	$(AR) cru libsmartdimmer.a $(OBJECTS)
    	$(RANLIB) libsmartdimmer.a
    
    clean: clean-recursive clean-lib
    clean-lib:
    	rm -f *.o *.a *~
    
    distclean: distclean-recursive clean-lib 
    	rm -f Makefile
    
    install:
    uninstall:
    
    # Walk through the sub directories and do what is requested
    all-recursive clean-recursive distclean-recursive:
    	@set fnord; target=`echo $@ | sed s/-recursive//`; \
    	list='$(SUBDIRS)'; for subdir in $$list; do \
    	    $(MAKE) -C $$subdir $$target ; \
    	done;
    

    Und nun wollte ich aus KDE-technischen Gründen das Ganze auf cmake umstellen....
    Dazu habe ich die Dateien der beiden Unterordner aufgezählt und per cmake-buildmakro sollen dann daraus die Libs gemacht werden. Der untere Abschnitt stammt noch aus dem Kde-Plugin-Tutorial. Allerdings scheint Irgendwas schief zu laufen

    # Project Needs a name ofcourse
    project(plasma-tutorial1)
    
    add_subdirectory( backend )
    add_subdirectory( smartdimmer )
    
    # source files for zlib
    SET(BACKEND_SRCS ${BACKEND_SRCS}
       backend/backend.c
       backend/bios.c
       backend/config.c
       backend/error.c
       backend/nv30.c
       backend/nv31.c
       backend/nv40.c
       backend/info.c
       backend/overclock.c
       backend/i2c.c
       backend/xf86i2c.c
       backend/lm99.c
       backend/f75375.c
       backend/w83l785r.c
       backend/libc_wrapper.c
    )
    
    SET(SMARTD_SRCS ${SMARTD_SRCS}
       smartdimmer/smartdimmer.c
    )
    
    ADD_LIBRARY(backend_shared ${BACKEND_SRCS})
    ADD_LIBRARY(smartdimmer_shared ${SMARTD_SRCS})
    
    # 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}
       ${CMAKE_SOURCE_DIR}/backend
       ${CMAKE_SOURCE_DIR}/smartdimmer
       )
    
    # 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 bekomme folgenden Fehler:

    [  5%] Building C object CMakeFiles/backend_shared.dir/backend/backend.o                                            
    /home/Xerces/devel/dimmer_applet_cmake/backend/backend.c: In function ‘set_card’:                                       
    /home/Xerces/devel/dimmer_applet_cmake/backend/backend.c:83: warning: passing argument 1 of ‘NV_I2CCreateBusPtr’ discards qualifiers from pointer target type                                                                                   
    /home/Xerces/devel/dimmer_applet_cmake/backend/backend.c:84: warning: passing argument 1 of ‘NV_I2CCreateBusPtr’ discards qualifiers from pointer target type                                                                                   
    /home/Xerces/devel/dimmer_applet_cmake/backend/backend.c:92: warning: passing argument 1 of ‘NV_I2CCreateBusPtr’ discards qualifiers from pointer target type                                                                                   
    [ 10%] Building C object CMakeFiles/backend_shared.dir/backend/bios.o
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:314:5: warning: "DEBUG" is not defined
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c: In function ‘dump_bios’:
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:324: warning: unused variable ‘j’
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c: In function ‘parse_bios’:
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:393: warning: passing argument 2 of ‘locate’ discards qualifiers from pointer target type
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:403: warning: passing argument 2 of ‘locate’ discards qualifiers from pointer target type
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:403: error: expected expression before ‘/’ token
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:408: warning: passing argument 2 of ‘locate’ discards qualifiers from pointer target type
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:408: warning: passing argument 2 of ‘locate’ discards qualifiers from pointer target type
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:439:5: warning: "DEBUG" is not defined
    /home/Xerces/devel/dimmer_applet_cmake/backend/bios.c:390: warning: unused variable ‘i’
    make[2]: *** [CMakeFiles/backend_shared.dir/backend/bios.o] Fehler 1
    

    Sowas trat bei den Makefiles nicht auf, weis jemand Rat? Ich bin leider vollkommen neu bei cmake.


Anmelden zum Antworten