[CMake] problem w/ "find_package"_ makefile does not always compile

ny nikos.yiotis at gmail.com
Mon Jan 3 05:16:53 EST 2011


Thank you so much!
Nikos Yiotis
Chat Skype: nyiotis
Contact Me [image:
Linkedin]<http://my.wisestamp.com/link?u=ws7c27w2vnrx4d2b&site=www.linkedin.com/in/yiotis>





On Mon, Jan 3, 2011 at 9:57 AM, Nizar Khalifa Sallem <nksallem at laas.fr>wrote:

> At Sun, 2 Jan 2011 22:15:56 +0100,
> ny wrote:
> >
> > ** Apologies for double-posting my earlier message got truncated **
> >
> > greetings!
> >
> > I spent enough time trying to make the software work,
> > so I'd be happy to get some feedback::
> > I built research code written in (templated) c++, size is approximately
> > ~15K lines. I am on a mac and do not use Cocoa(/xcode), straight from
> > command line. Note that I choose to generate a Unix makefile, not an
> > xcode project and I am on snow leopard 10.6.5 w/ g++ 4.2.1.
> > The pain was that there were no makefile coming along w/ the project,
> > so I had to translate the *.vcproj file from scratch to CMakelists and
> > then convert it to makefile. My directories structure (directories
> marked
> > w/ DIR_ else are files, indentation denotes deeper level)::
> >
> > DIR_4DMPU_exampleTest
> >
> >       4DMPU_example.cpp
> >       DIR_ann_1.1.2
> >       DIR_cmake
> >       CMakeLists.txt
> >       FindANN.cmake
> >           Modules
> >               FindANN.cmake
> >
> >       DIR_include
> >
> >       DIR_mc4d_tables
> >           num_tet_table.cpp
> >           tet_table.cpp
> >           vert_table.cpp
> >
> > DIR_4DMPU_exampleTestBin
> >
> > In the cmake GUI I add:
> > ANN_LIBRARY
>  /Users/nikos/Downloads/4DMPU_exampleTest/ann_1.1.2/include
> > ANN_INCLUDE_DIR
> /Users/nikos/Downloads/4DMPU_exampleTest/ann_1.1.2/lib/libANN.a
> >
> > My CMakeLists.txt is::
> >
> > cmake_minimum_required(VERSION 2.8)
> > project( 4DMPU_example )
> >
> > SET (CMAKE_BUILD_TYPE DEBUG)
> >
> > set(SOURCE_FILES
> > 4DMPU_example.cpp
> > mc4d_tables/num_tet_table.cpp
> > mc4d_tables/tet_table.cpp
> > mc4d_tables/vert_table.cpp
> > )
> >
> > set(INCLUDE_FILES
> > include/4dtables.h
> > include/ann_helper.h
> >                    ...                     # more headers
> >         include/Volume.h ann_1.1.2/include
> >         include/VolumeIO.h
> > )
> >
> > include_directories(
> >   ${PROJECT_SOURCE_DIR}/ann_1.1.2/include
> >   ${PROJECT_SOURCE_DIR}/ann_1.1.2/lib
> >   include
> > )
> >
> > INCLUDE(FindANN.cmake)
> > IF(ANN_FOUND)
> >   INCLUDE_DIRECTORIES( ${ANN_INCLUDE_DIR} )
> > ENDIF(ANN_FOUND)
> >
> > set(LIBS ${LIBS} ${ANN_LIBRARY})
> >
> > add_executable( 4DMPU_example ${SOURCE_FILES} )
> > target_link_libraries( 4DMPU_example ${LIBS} )
> >
> > and the content of the FindANN.cmake::
> >
> > FIND_LIBRARY(ANN_LIBRARY lANN
> > ${PROJECT_SOURCE_DIR}/ann_1.1.2/lib
> >   )
> > FIND_PATH( ANN_INCLUDE_DIR ANN/ANN.h ANN/ANNperf.h ANN/ANNx.h
> >   ${PROJECT_SOURCE_DIR}/ann_1.1.2/include
> >        )
> >
> > IF(ANN_LIBRARY)
> >   IF(ANN_INCLUDE_DIR)
> > SET(ANN_FOUND TRUE)
> >   ENDIF(ANN_INCLUDE_DIR)
> > ENDIF(ANN_LIBRARY)
> >
> > The project compiles fine this way.
> >
> > Now, the problem is that if I follow the advice below
> >
> >
> http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries#Using_external_libraries_in_your_project
> >
> > and add the line
> >
> > set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
> "${CMAKE_SOURCE_DIR}/cmake/Modules/")
> >
> > and, moreover, substitute
> >
> > include_directories(
> >   ${PROJECT_SOURCE_DIR}/ann_1.1.2/include
> >   ${PROJECT_SOURCE_DIR}/ann_1.1.2/lib
> >   include
> > )
> >
> > with
> >
> > find_package(ANN REQUIRED)
> > include_directories(${ANN_INCLUDE_DIR}
> > include
> > )
> >
> > into CMakeLists.txt I get a linking problem.
> > I do not reproduce the message -> the point is that the ANN library is
> not linked
> > w/ my object files. Can anyone tell me what I am doing wrong in the 2nd
> case?
> >
> > Note also that in the 2nd case I explicitly add::
> >
> > ANN_DIR
>  /Users/nikos/Downloads/4DMPU_exampleTest/cmake/Modules
> >
> > in the cmake GUI.
> >
> > Thanks for any pointers
> > N
> >
> >
> Hi, the problem is that you don't have a CMakeLists for your ANN
> library so 2 choices:
> 1. write a CMakeLists for ANN and then just add_subdirectory(ANN) and
> use the ANN_library target name to link with.
> 2. assume that ANN is a part of your project which you have done so
> far but the wrong way.
> you need to do the following:
> i- remove find_package(ANN REQUIRED) since as far as I know from ANN
> it doesn't ship with a .pc or FindANN.cmake file so you can't use find
> find_package(ANN REQUIRED)
> ii- set ANN_INCLUDE_DIR and ANN_LIBS_DIR and ANN_LIBRARIES to be user
> assigned values which you fill with cmake
> .. -DANN_INCLUDE_DIR=/path/to/ANN/install etc.
>
> Now I have submitted a while ago a CMakeLists.txt to the ANN library
> project and they didn't include it so if you want you can have a ANN
> subdirectory in your prject, place the CMakeLists.txt there and do as
> 1.
>
> I attach the file
>
> cmake_minimum_required(VERSION 2.6)
>
> project(ANN CXX)
> set(major 1)
> set(minor 1)
> set(revision 2)
> set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ANN_SOURCE_DIR}/lib)
> set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ANN_SOURCE_DIR}/bin)
>
> # the ANN library
> include_directories(include)
> include_directories(src)
> file(GLOB sources src/*.cpp)
> add_library(ANN SHARED ${sources})
> set_target_properties(ANN PROPERTIES VERSION ${major}.${minor}.${revision}
>                                           SOVERSION ${major}
>
>
> COMPILE_FLAGS "-O3")
>
> # ANN test utility
> include_directories(test)
> file(GLOB test_sources test/*.cpp)
> add_executable(ann_test ${test_sources})
> target_link_libraries(ann_test ANN)
>
> # ANN sample utility
> add_executable(ann_sample sample/ann_sample.cpp)
> target_link_libraries(ann_sample ANN)
>
> # ann2fig utility
> add_executable(ann2fig ann2fig/ann2fig.cpp)
> target_link_libraries(ann2fig ANN)
>
> # install
> install(TARGETS ANN ann_test ann_sample ann2fig
>        RUNTIME DESTINATION bin
>              LIBRARY DESTINATION lib)
> install(DIRECTORY sample doc DESTINATION share/ANN)
>
>
>
> Cheers,
> --
> Nizar
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110103/5b039bb5/attachment-0001.htm>


More information about the CMake mailing list