2011/4/12 Nicolas Desprès <[email protected]>: > 2011/4/11 Brad King <[email protected]>: >> On 04/11/2011 05:16 AM, Nicolas Desprès wrote: >>> I have continued my work on the Ninja generator this weekend and I >> >> Great! Thanks for working on this. >> >>> Here my roadmap: >>> 1/ Configure and build an helloworld program with a shared library.
I have this one working now and I also support project with recursive CMakeLists.txt. However I had to overload: void cmLocalGenerator::OutputLinkLibraries(std::ostream& fout, cmTarget& tgt, bool relink); and I am the only generator doing it, so I think it may be a problem. I need to do it because this method writes something like that: -rdynamic libgreeting.so -Wl,-rpath,/home/despre_n/src/test/helloworld-shared-cmake/_build-make and my problem is that it is mixing dependencies and flags. So my version write only: -rdynamic -Wl,-rpath,/home/despre_n/build/test/helloworld-shared-cmake/_build and I get the dependency list from another function. Actually I extracted it from OutputLinkLibraries(). Here the differences in the generated command line: Makefile: /usr/bin/c++ -g CMakeFiles/helloworld.dir/src/main.cc.o -o helloworld -rdynamic libgreeting.so -Wl,-rpath,/home/despre_n/src/test/helloworld-shared-cmake/_build-make Ninja: /usr/bin/c++ -g CMakeFiles/helloworld.dir/src/main.cc.o libgreeting.so -o helloworld -rdynamic -Wl,-rpath,/home/despre_n/build/test/helloworld-shared-cmake/_build I had to do that because I want to generate only one Ninja link rule for a given language and target type. For example I generate this # Rule for linking CXX shared library. rule CXX_SHARED_LIBRARY_LINKER command = /usr/lib/ccache/g++ -fPIC $CXX_FLAGS $LDFLAGS -shared -Wl,-soname,$SONAME -o $out $in $LDLIBS description = Linking CXX shared library $out # Rule for linking CXX executable. rule CXX_EXECUTABLE_LINKER command = /usr/lib/ccache/g++ $CXX_FLAGS $LDFLAGS $in -o $out $LDLIBS description = Linking CXX executable $out The $in variables is automatically expanded by Ninja with the dependencies and the other variables are set for each target build statements: # Link the shared library libgreeting.so build libgreeting.so: CXX_SHARED_LIBRARY_LINKER CMakeFiles/greeting.dir/src/greeting/greeting.cc.o CXX_FLAGS = -g SONAME = libgreeting.so # Link the executable helloworld build helloworld: CXX_EXECUTABLE_LINKER CMakeFiles/helloworld.dir/src/main.cc.o libgreeting.so CXX_FLAGS = -g LDLIBS = -rdynamic -Wl,-rpath,/home/despre_n/build/test/helloworld-shared-cmake/_build It seems not to be an issue with g++ but It might break with other compiler/language. I don't know. There are several workaround possible to fix this. I will see when the time will come. Also I dropped the generation of a "clean" target since I have implemented a tool in Ninja doing the job with more feature and way easier to implement. It is waiting to be merged with the upstream: https://github.com/polrop/ninja/commits/more-options-and-tools [...] -- Nicolas Desprès _______________________________________________ cmake-developers mailing list [email protected] http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers
