[CMake] simple question

Mike Jackson mike.jackson at imts.us
Fri Dec 15 08:52:33 EST 2006


I am not going to tackle the point of how many CMakeLists.txt files  
you should have but I can tell you how to avoid all the CMake temp  
stuff..

This is how I set up my projects currently.

It looks as though we have similar arrangements of our source codes.  
So first, in your top level CMakeLists.txt file add the following  
AFTER the "project()" line but BEFORE the "subdirs()" line:

#------ Setup output Directories ---------------------------------
SET (LIBRARY_OUTPUT_PATH
	${PROJECT_BINARY_DIR}/Bin
	CACHE PATH
	"Single Directory for all Libraries"
)

#------ Setup the Executable output Directory  
---------------------------------
SET (EXECUTABLE_OUTPUT_PATH
	${PROJECT_BINARY_DIR}/Bin
	CACHE PATH
	"Single Directory for all Executables."
)

I am going to assume a unix/terminal environment. Make the  
adjustments to tools for XP.

Now, what you do is create a directory at the same level as the top  
level CMakeLists.txt file, call it "Build". Now "cd" into the "Build"  
directory then run "cmake ../". This will generate all the CMake  
files and other stuff _inside_ the Build directory thus keeping your  
source tree clean.
Now type "make" in the same directory and your binaries will be built  
inside "./Build/Bin".

This makes things very convenient when you want to submit your source  
to CVS or clean out all the built products. Just blow away everything  
inside "Build" and redo the cmake.

I choose to do it this way because I use Eclipse with the CDT plugins  
to do C++ development. Eclipse/CDT works better if the built binaries  
are _within_ the project directory.

Kitware and others may tell you to do a true "out of source" build  
which means that you would create a directory at the same level as  
your main project directory, lets call it "test-build", and then from  
within "test-build" do a "cmake ../test". This is absolutely valid  
way to do things and depending on the size of your project may be  
preferable. I can not image using my method on a project like  
ParaView or VTK. It would work, but with a project _that_ large I  
would want to keep the project directories and the build directories  
distinctly separate.

Good Luck.
-- 
Mike Jackson   Senior Research Engineer
Innovative Management & Technology Services


On Dec 15, 2006, at 8:26 AM, Mehdi Rabah wrote:

> Hi everyone,
>
> I'm new to cmake, and there's something simple I don't know how to do.
> Here what I wrote in CMakeLists.txt so far:
>
> project(test)
> subdirs(src)
>
> and in src directory I have another CMakeLists.txt :
>
> add_executable(testApp Applications/testApp.cpp)
>
> and what I want is that the compilation result of testApp.cpp goes  
> into the ./bin directory, but by default it goes into ./src
> I use ccmake to set it to go to the bin directory, but when I run  
> the compilation the makefile create a src/bin and use it.
>
> How to set cmake so it write the binary in ./bin ?
> Also, in src I have a lot of temporary files (cmake_install.cmake,  
> CMakeFiles, ...), how can I avoid having this in my  
> subdirectories ? Should I write one only CMakeLists.txt in the root  
> directory ?
>
> Regards,
>
> Mehdi
>
>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20061215/7ee5fb2d/attachment.html


More information about the CMake mailing list