Darby J Van Uitert wrote: > I am linking against a library that I have as a static and shared > library with the same name (foo.a and foo.so). When I build my project > with BUILD_SHARED_LIBS on, I want it to look for foo.so and when I build > static libs, I want it to link against foo.a. But it seems to always > want to build against the .so unless I specify it directly using the > variable used in the FIND_LIBRARY command. Is there a flag I can set to > tell it to look for static libraries first? Thanks.
There are two parts to this problem: 1.) Getting FIND_LIBRARY to choose libfoo.a over libfoo.so. 2.) Getting the linker to choose libfoo.a over libfoo.so. When FIND_LIBRARY gives back a file name like /path/to/libfoo.so and it is given to TARGET_LINK_LIBRARIES CMake generates a link line containing -L/path/to -lfoo Then it is up to the linker to choose between libfoo.a and libfoo.so. For part 1 the FIND_LIBRARY command should probably have a STATIC_ONLY and/or SHARED_ONLY option. For part 2 CMake should probably instead map /path/to/libfoo.so to -L/path/to -lfoo and /path/to/libfoo.a to -L/path/to -Wl,-Bstatic -lfoo -Wl,-Bdynamic You can submit a feature request here: http://www.cmake.org/Bug Meanwhile you can add the -Wl,-Bstatic flags yourself in CMakeLists.txt code. Something like this may work: FIND_LIBRARY(MYLIB ...) IF(UNIX) IF(NOT BUILD_SHARED_LIBS) SET(MYLIB -Wl,-Bstatic ${MYLIB} -Wl,-Bdynamic) ENDIF(NOT BUILD_SHARED_LIBS) ENDIF(UNIX) TARGET_LINK_LIBRARIES(mytarget ${MYLIB}) Don't worry whether FIND_LIBRARY returns a shared or static lib because the link flags will override the choice anyway. -Brad _______________________________________________ CMake mailing list [email protected] http://www.cmake.org/mailman/listinfo/cmake
