[CMake] Re: Library linkage spewage under Makefiles (make -s)

James Bigler bigler at cs.utah.edu
Tue Dec 5 17:43:55 EST 2006


James Bigler wrote:
> In 2.2 when you specified SET(CMAKE_VERBOSE_MAKEFILE ON) and then did 
> "make -s" you got some nice looking output of what you were building.
> 
> Now with 2.4 it's all pretty and colored (nice!), but whenever I link a 
> library I get what appears to be the contents of link.txt:
> 
> Linking CXX shared library ../lib/libManta_Interface.so
> /usr/bin/g++-4.0  -fPIC -O2  -shared -Wl,-soname,libManta_Interface.so 
> -o ../lib/libManta_Interface.so 
> "CMakeFiles/Manta_Interface.dir/AmbientLight.o"
> ...
> -L/tmp/bigler/manta/trunk/opt/lib -lManta_Core -lSCIRun_Core 
> -Wl,-rpath,/tmp/bigler/manta/trunk/opt/lib
> 
> Is there a way or option I could use to get this stuff to not output 
> like it did before with 2.2?

I have some more information on this.

For regular object file builds you have a makefile rule that looks like 
this:

Model/CMakeFiles/Manta_Model.dir/Backgrounds/ConstantBackground.o: 
/tmp/bigler/manta/trunk/src/Model/Backgrounds/ConstantBackground.cc
	$(CMAKE_COMMAND) -E cmake_progress_report 
/tmp/bigler/manta/trunk/opt/CMakeFiles $(CMAKE_PROGRESS_3)
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green 
"Building CXX object 
Model/CMakeFiles/Manta_Model.dir/Backgrounds/ConstantBackground.o"
	/usr/bin/g++-4.0   $(CXX_FLAGS) -o 
Model/CMakeFiles/Manta_Model.dir/Backgrounds/ConstantBackground.o -c 
/tmp/bigler/manta/trunk/src/Model/Backgrounds/ConstantBackground.cc




For the library you invoke the cmake program with the link.txt file:

lib/libManta_Model.so: Model/CMakeFiles/Manta_Model.dir/build.make
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --red --bold 
"Linking CXX shared library ../lib/libManta_Model.so"
	cd /tmp/bigler/manta/trunk/opt/Model && $(CMAKE_COMMAND) -P 
CMakeFiles/Manta_Model.dir/cmake_clean_target.cmake
	cd /tmp/bigler/manta/trunk/opt/Model && $(CMAKE_COMMAND) -E 
cmake_link_script CMakeFiles/Manta_Model.dir/link.txt --verbose=$(VERBOSE)



In 2.2.3 you invoke the linking directly:

lib/libManta_Model.so: Model/CMakeFiles/Manta_Model.dir/build.make
	@echo "Linking CXX shared library ../lib/libManta_Model.so"
	$(CMAKE_COMMAND) -E remove -f ../lib/libManta_Model.a 
../lib/libManta_Model.so
	cd /home/sci/bigler/manta/trunk/opt-4.0.2/Model && /usr/bin/g++-4.0 
-fPIC -Wl,-rpath,/usr/lib/gcc/i586-suse-linux/4.0.2 -shared 
-Wl,-soname,libManta_Model.so -o ../lib/libManta_Model.so 
$(Manta_Model_OBJECTS) $(Manta_Model_EXTERNAL_OBJECTS) 
-L/home/sci/bigler/manta/trunk/opt-4.0.2/lib 
-L/home/sci/bigler/pub/src/teem/muzzle-opt/bin -lManta_Image 
-lManta_Interface -lManta_Core -lteem -lpng -lSCIRun_Core 
-Wl,-rpath,/home/sci/bigler/manta/trunk/opt-4.0.2/lib:/home/sci/bigler/pub/src/teem/muzzle-opt/bin 




The object file build calls the compiler directly and the library 
linkage calls the cmake program with the $(VERBOSE) variable.  My guess 
is that calling "make -s" doesn't override the VERBOSE variable.

I liked being able to turn on verbose makefiles and making them silent 
by invocation.  This allowed me to rerun the make build with out the 
silent option when it needed it without having to reconfigure and 
rebuild the world.

Anyone have ideas of how to get around this?

Thanks,
James





More information about the CMake mailing list