[CMake] Re: How to integrate 3rd-party software into cmake system

Clark J. Wang dearvoid at gmail.com
Sat Jun 9 04:54:45 EDT 2007


On 6/9/07, Clark J. Wang <dearvoid at gmail.com> wrote:
>
> For example, I have a project `test' which needs a 3rd-party software
> `hello'. The directory structure looks like this:
>
> test/test.c
> test/CMakeLists.txt
> test/build  <-- I run cmake in this directory
> test/hello/hello.c
> test/hello/main.c
> test/hello/Makefile


Another question:

By default `make clean' does not know how to clean the 3rd-party package.
How can I add another command which will be run by `make clean'?

hello's Makefile will create a lib `test/hello/libhello.so' and an exe
> `test/hello/hello'. `test/test.c' depends on `libhello.so' to compile.
> I write a CMakeLists.txt like this but it does not work:
>
> ### BEGIN ###
>
> PROJECT(test)
>
> SET(CMAKE_VERBOSE_MAKEFILE ON)
>
> SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
> SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
>
> LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH})
>
> SET(hellodir ${PROJECT_SOURCE_DIR}/hello)
> SET(hellolib ${LIBRARY_OUTPUT_PATH}/libhello.so)
> SET(helloexe ${EXECUTABLE_OUTPUT_PATH}/hello)
> ADD_CUSTOM_COMMAND(
>     OUTPUT ${hellolib} ${helloexe}
>     COMMAND make -C ${hellodir}
>     COMMAND cp ${hellodir}/libhello.so ${hellolib}
>     COMMAND cp ${hellodir}/hello ${helloexe}
> )
>
> ADD_EXECUTABLE(test test.c)
> TARGET_LINK_LIBRARIES(test ${hellolib})
>
> ### END ###
>
> Following is the output of make:
>
> $ make
> /usr/local/cmake-2.4.6/bin/cmake -H/root/tmp/cmake -B/root/tmp/cmake/b
> --check-build-system CMakeFiles/Makefile.cmake 0
> /usr/local/cmake-2.4.6 /bin/cmake -E cmake_progress_start
> /root/tmp/cmake/b/CMakeFiles 1
> make -f CMakeFiles/Makefile2 all
> make[1]: Entering directory `/root/tmp/cmake/b'
> make -f CMakeFiles/test.dir/build.make CMakeFiles/test.dir/depend
> make[2]: Entering directory `/root/tmp/cmake/b'
> Scanning dependencies of target test
> cd /root/tmp/cmake/b && /usr/local/cmake-2.4.6/bin/cmake -E cmake_depends
> "Unix Makefiles" /root/tmp/cmake /root/tmp/cmake /root/tmp/cmake/b
> /root/tmp/cmake/b /root/tmp/cmake/b/CMakeFiles/test.dir/DependInfo.cmake
> make[2]: Leaving directory `/root/tmp/cmake/b'
> make -f CMakeFiles/test.dir/build.make CMakeFiles/test.dir/build
> make[2]: Entering directory `/root/tmp/cmake/b'
> /usr/local/cmake-2.4.6/bin/cmake -E cmake_progress_report
> /root/tmp/cmake/b/CMakeFiles 1
> [100%] Building C object CMakeFiles/test.dir/test.o
> /usr/bin/gcc   -o CMakeFiles/test.dir/test.o   -c /root/tmp/cmake/test.c
> make[2]: *** No rule to make target `lib/libhello.so', needed by
> `bin/test'. Stop.
> make[2]: Leaving directory `/root/tmp/cmake/b'
> make[1]: *** [CMakeFiles/test.dir/all] Error 2
> make[1]: Leaving directory `/root/tmp/cmake/b'
> make: *** [all] Error 2
> $
>
> So, how can I integrate 3rd-party software into my own project?
>
> Thank you.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20070609/8efb4cb8/attachment.htm


More information about the CMake mailing list