Hello cmake users! I'm quite new to cmake as well as makefiles, and i've bumped the same trouble twice. I'm trying to break a source code into several libraries and a main program. The scenario has one main executable called calClient which uses functions from three libraries, let's say 1A 1B and 2C. Everybody uses library 2C, that is calClient, 1A and 1B. I've stored the source codes of 1A 1C and 2C in a subdirectory called lib/ toghether with a CMakeLists.txt :
FIND_PACKAGE(YARP REQUIRED) > > SET(PROJECT_LIBS > 2C.cpp > 2C.h > 1B.cpp > 1B.h > 1A.cpp > 1A.hpp > ) > > add_library(callibs ${PROJECT_LIBS}) In the upper directory, toghether with the source code of the main program, I have: project(calibration) > > cmake_minimum_required(VERSION 2.6) > > set(CMAKE_CXX_FLAGS "-g -Wall") > > set(PROJECT_SRC > calClient.cpp > calClient.hpp > chaser.cpp > chaser.hpp > ) > > FIND_PACKAGE(YARP REQUIRED) > FIND_PACKAGE(OpenCV REQUIRED) > > add_subdirectory(lib) > > INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib) > link_directories(lib) > > INCLUDE_DIRECTORIES(${OPENCV_INCLUDE_DIR}) > > ADD_EXECUTABLE(calClient ${PROJECT_SRC}) > TARGET_LINK_LIBRARIES( calClient ${OPENCV_LIBRARIES} ) > TARGET_LINK_LIBRARIES( calClient callibs ) > Every header includes the headers of the files which contains the functions that it needs. So, calClient.hpp actually includes 1A, 1B and 2C. The output of the make command is then: > [ 60%] Built target callibs > Linking CXX executable calClient > CMakeFiles/calClient.dir/calClient.cpp.o: In function > `incrementalCalibrate(yarp::dev::IPositionControl*, yarp::dev::IEncoders*)': > /home/pmonso/YARP/Calclient/calClient.cpp:276: undefined reference to > `print_double_array(double const*, int)' > /home/pmonso/YARP/Calclient/calClient.cpp:277: undefined reference to > `print_double_array(double const*, int)' > /home/pmonso/YARP/Calclient/calClient.cpp:295: undefined reference to > `print_double_array(double const*, int)' > CMakeFiles/calClient.dir/calClient.cpp.o: In function > `calibrate(yarp::dev::IPositionControl*, yarp::dev::IEncoders*)': > /home/pmonso/YARP/Calclient/calClient.cpp:155: undefined reference to > `print_double_array(double const*, int)' > CMakeFiles/calClient.dir/calClient.cpp.o: In function > `randomCalibrate(yarp::dev::IPositionControl*, yarp::dev::IEncoders*)': > /home/pmonso/YARP/Calclient/calClient.cpp:207: undefined reference to > `print_double_array(double const*, int)' > CMakeFiles/calClient.dir/calClient.cpp.o:/home/pmonso/YARP/Calclient/calClient.cpp:208: > more undefined references to `print_double_array(double const*, int)' follow > collect2: ld returned 1 exit status > make[2]: *** [calClient] Error 1 > make[1]: *** [CMakeFiles/calClient.dir/all] Error 2 > make: *** [all] Error 2 > The function print_double_array is located in the 2C source and header files which, as I said, is included in calClient header as well as in headers of 1A and 1B. Does somebody know why linking fails? What I am doing wrong? It's driving me nuts! Thanks alot for your help! pol
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake