[CMake] How to relink executables when depdent library got changed ?

Chih-pin Wu stokeman at gmail.com
Thu Jun 11 10:55:49 EDT 2009


Hi Bill:

  Thanks, it's exactly what you mentioned, and I got some mistake on my
CMakeList.txt.

  Originally I have some syntax like:

SET(LIB_DIRS ${LIB_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../../../lib)
SET(LIBS ${LIBS} "libMyLibA.a")
TARGET_LINK_LIBRARIES(${PROGNAME} ${LIBS})

  And I suddenly found out the usage was wrong and just too stupid ..
although it works on my first make.
However it would't relink when ../../../lib/libMyLibA.a got updated.

  After I changed to:

SET(LIB_DIRS ${LIB_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/../../../lib)
SET(LIBS ${LIBS} "MyLibA")
TARGET_LINK_LIBRARIES(${PROGNAME} ${LIBS})

// or
SET(LIBS ${LIBS} "../../../lib/libMyLibA.a")
TARGET_LINK_LIBRARIES(${PROGNAME} ${LIBS})

  Both works when libMyLibA got updated.

  Now it works fine. And thank you.

On Thu, Jun 11, 2009 at 9:44 PM, Bill Hoffman <bill.hoffman at kitware.com>wrote:

> Chih-pin Wu wrote:
>
>> Hi all:
>>
>>  I'm working on an embedded platform and building integrated software as
>> multimedia CE devices. And I am just started trying to introduce CMake to
>> replace my legacy environment constructed by many hand-written gnu styled
>> makefiles.
>>
>>  I have many components which is cross referred to each other very
>> complicatedly, and it really helps a lot when I started to migrate to CMake
>> with the benefit of automatic dependency checking.
>>
>>  However, my order of building is
>> i) build lots of libraries, called components
>> ii) then build final executable, called application, linking with
>> libraries
>>
>>  I really felt comfort when I modified some header files in the component
>> directory, and makefiles generated by CMake automatically found it, rebuild
>> all dependent source files as well as the libraries.
>> However I could not make my final executable link those libraries
>> automatically when libraries got changed.
>>
>>  I used TARGET_LINK_LIBRARIES to enumerate linking libraries, also
>> ADD_DEPENDENCIES with these libraries.
>> But I still can't make it relink to a executable when those libraries got
>> changed, no matter it's rebuilt by makefile or replaced by some newer
>> revision.
>>
>>
> Can you post some of your cmake code?  This should work.  I suspect that
> you are not using full paths to libraries in target_link_libraries.
> add_dependencies should not be needed.
>
> -Bill
>



-- 
Wu Chih-pin(吳智斌)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090611/c194ef16/attachment-0001.htm>


More information about the CMake mailing list