[CMake] Link directories order

Renaud Detry renaudjdetry at airpost.net
Tue Nov 6 05:51:59 EST 2007


Hi all,

I posted an issue about link dir order a week ago, but it seems nobody
has replied to it :-/ Is there a reason like "one should not use env
var, but FindXXX scripts instead", or did it simply slip through
unnoticed?

The initial post follows.

Thanks,
Renaud.


Hello,

I'm having trouble with cmake LINK_DIRECTORIES order. I understand
cmake smart-orders link directory flags. However, flags coming from
the shell env LDFLAGS don't seem to be taken into account in this
smart sort. Is this a feature or a bug?

To illustrate the issue, I slightly modified the example code from

   http://www.cmake.org/HTML/cmakeExample.tar.gz

The only change is in

   cmakeExample.tar.gz:CMakeExample/Hello/CMakeLists.txt

which becomes

# Create a library called "Hello" which includes the source file  
"hello.cxx".
# The extension is already found.  Any number of sources could be  
listed here.
add_library (Hello hello.cxx)

INSTALL(TARGETS Hello
         RUNTIME DESTINATION bin
         ARCHIVE DESTINATION lib
         LIBRARY DESTINATION lib)

As one can see in the attached terminal output, the linker for Demo
looks in /tmp/lib before looking in the build dir:

   /usr/bin/c++ -headerpad_max_install_names -fPIC -L/tmp/lib
   "CMakeFiles/helloDemo.dir/demo.o"
   "CMakeFiles/helloDemo.dir/demo_b.o" -o helloDemo
   -L/Volumes/Data/Users/detryr/tmp/CMakeExample/Hello -lHello

As a result, Demo is linked against an obsolete installed version of
Hello, instead of the local fresh one.

Here's the terminal output (note that /tmp/lib was empty when I ran  
cmake):

[detryr at MacBook-Pro] $ export LDFLAGS=-L/tmp/lib           [~/tmp/ 
CMakeExample]
[detryr at MacBook-Pro] $ rm /tmp/lib/libHello.a              [~/tmp/ 
CMakeExample]
rm: /tmp/lib/libHello.a: No such file or directory
[detryr at MacBook-Pro] $ cmake -DCMAKE_INSTALL_PREFIX=/tmp   [~/tmp/ 
CMakeExample]
   [...]
[detryr at MacBook-Pro] $ make VERBOSE=1                      [~/tmp/ 
CMakeExample]
   [...]
cd /Volumes/Data/Users/detryr/tmp/CMakeExample/Demo && /usr/bin/c+ 
+     -headerpad_max_install_names -fPIC -L/tmp/lib "CMakeFiles/ 
helloDemo.dir/demo.o" "CMakeFiles/helloDemo.dir/demo_b.o"   -o  
helloDemo  -L/Volumes/Data/Users/detryr/tmp/CMakeExample/Hello -lHello
   [...]



More information about the CMake mailing list