Hello

This simple CMakeLists.txt will (on NetBSD at least) cause the binary
'bar' to be linked with -fPIC. Is this really necessary? I know that it
must be used when producing the shared object 'foo', but I did not know
it was needed for the executable also? I have checked the flags passed
from gcc to the linker during the linking of the executable but can not
see that -fPIC makes any difference.


CMakeLists.txt: (the foo.c and bar.c are very simple C files)
PROJECT(foobar)
ADD_LIBRARY(foo SHARED foo.c)
ADD_EXECUTABLE(bar bar.c)
TARGET_LINK_LIBRARIES(bar foo)


Output from verbose make:
/usr/pkg/bin/cmake -H/home/lars/tmp/hello -B/home/lars/tmp/hello/build 
--check-build-system CMakeFiles/Makefile.cmake 0
make -f CMakeFiles/Makefile2 all
make -f CMakeFiles/foo.dir/build.make CMakeFiles/foo.dir/depend
Scanning dependencies of target foo
/usr/pkg/bin/cmake -E cmake_depends  "Unix Makefiles" 
/home/lars/tmp/hello/build /home/lars/tmp/hello/build 
/home/lars/tmp/hello/build/CMakeFiles/foo.dir/DependInfo.cmake
make -f CMakeFiles/foo.dir/build.make CMakeFiles/foo.dir/build
Building C object CMakeFiles/foo.dir/foo.o
gcc -Dfoo_EXPORTS -fPIC -o CMakeFiles/foo.dir/foo.o   -c 
/home/lars/tmp/hello/foo.c
Linking C shared library libfoo.so
/usr/pkg/bin/cmake -E remove -f libfoo.a libfoo.so
gcc -fPIC  -shared  -o libfoo.so "CMakeFiles/foo.dir/foo.o" 
make -f CMakeFiles/bar.dir/build.make CMakeFiles/bar.dir/depend
Scanning dependencies of target bar
/usr/pkg/bin/cmake -E cmake_depends  "Unix Makefiles" 
/home/lars/tmp/hello/build /home/lars/tmp/hello/build 
/home/lars/tmp/hello/build/CMakeFiles/bar.dir/DependInfo.cmake
make -f CMakeFiles/bar.dir/build.make CMakeFiles/bar.dir/build
Building C object CMakeFiles/bar.dir/bar.o
gcc  -o CMakeFiles/bar.dir/bar.o   -c /home/lars/tmp/hello/bar.c
Linking C executable bar
/usr/pkg/bin/cmake -E remove -f bar
gcc   -fPIC "CMakeFiles/bar.dir/bar.o"   -o bar  -L/home/lars/tmp/hello/build 
-lfoo -Wl,-rpath,/home/lars/tmp/hello/build



Best regards
        Lars Nordlund
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to