On Wed, Feb 27, 2008 at 8:08 PM, Christopher Harvey <[EMAIL PROTECTED]> wrote:
> Philip Lowman wrote: > > On Wed, Feb 27, 2008 at 7:13 PM, Christopher Harvey > > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote: > > > > Hi, > > Before I ask my question I want to clarify what I mean by an > > "arbitrary > > library". There are libraries that are registered in the system > > and you > > can link to them like so: > > target_link_library(targetName GL SDL pq) > > and they get sent to the linker int the form: > > -lGL -lSDL -lpq > > that fine, but I have a file in the form libName.a and I compiled it > > from source and it's not in the /usr/lib directory. It's just > > sitting in > > my project directory. how can I tell cmake not to turn > > target_link_libraries(targetName libName.a) into -lName, but keep > the > > original so the linker can find it? > > > > > > This works for me in CMake 2.4.8: > > > > TARGET_LINK_LIBRARIES(target ${PROJECT_SOURCE_DIR}/libFoo.a) > > > > > > > > /usr/bin/c++ -fPIC "CMakeFiles/bar.dir/bar.o" -o bar -rdynamic > > -L/home/lowman/tmp/foo -Wl,-Bstatic -lfoo -Wl,-Bdynamic > > -Wl,-rpath,/home/lowman/tmp/foo > > > > > > -- > > Philip Lowman > Hi Philip, > thanks, that's almost working. Now I've got: > target_link_libraries(target ../foolib/libFoo.a) > > this produces: > > /usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../x86_64-pc-linux-gnu/bin/ld: > cannot find -l../foolib/libFoo.a > > It would work if it looked for "../foolib/libFoo.a" and not > "-l../foolib/libFoo.a" > Any idea as to how to fix this? > If you're trying to link against a library that's outside of your source tree, you should always use FIND_LIBRARY then TARGET_LINK_LIBRARIES. FIND_LIBRARY will almost always do exactly what you want if you give it the NO_DEFAULT_PATHS option and specify the path to the library you want to find. In the event you have a ".so" and ".a" in the same directory you should be made aware that it always prefers the ".so". This behavior has been fixed in CMake CVS so you can specify the ".a" file directly if you encounter this situation. If you're trying to link against a library that's inside your source tree you can reference it relative to ${PROJECT_SOURCE_DIR} or one of the other variables that defines directories in your source tree, like ${CMAKE_CURRENT_SOURCE_DIR}. Apparently, relative paths will not work for this though (as you've discovered). See this page for details on variables you can use: http://www.cmake.org/Wiki/CMake_Useful_Variables -- Philip Lowman -- Philip Lowman
_______________________________________________ CMake mailing list [email protected] http://www.cmake.org/mailman/listinfo/cmake
