Philip Lowman wrote: > On Wed, Feb 27, 2008 at 8:08 PM, Christopher Harvey > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote: > > Philip Lowman wrote: > > On Wed, Feb 27, 2008 at 7:13 PM, Christopher Harvey > > <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > <mailto:[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 Ok, I see what's going on now. Works like a charm. Thanks again.
Chris. _______________________________________________ CMake mailing list [email protected] http://www.cmake.org/mailman/listinfo/cmake
