[CMake] Basic Tutorial Help

Sergey Rudchenko sergey.rudchenko at gmail.com
Thu May 28 05:25:12 EDT 2009


*Hi Adam,*
**
*Here is the basic rewrite of that tutorial in the imperative. I'll 
consider writing a tutorial in a step-by-step manner, but here is just a 
quick adaptation for now.*
**
--**
**Wbr,
Sergey
**
*The following example *demonstrates some key ideas of CMake. Make sure 
that you have CMake installed prior to running this example (go here 
<http://www.cmake.org/cmake/help/install.html> for instructions).
There are three directories involved. The top level directory has two 
subdirectories called ./Demo and ./Hello. In the directory ./Hello, a 
library is built. In the directory ./Demo, an executable is built by 
linking to the library. You should create a total of three CMakeList.txt 
files; one for each directory.
The first, top-level directory should contain the following 
CMakeLists.txt file.
# The name of our project is "HELLO". CMakeLists files in this project can
# refer to the root source directory of the project as 
${HELLO_SOURCE_DIR} and
# to the root binary directory of the project as ${HELLO_BINARY_DIR}.
cmake_minimum_required (VERSION 2.6)
project (HELLO)

# Recurse into the "Hello" and "Demo" subdirectories. This does not 
actually
# cause another cmake executable to run. The same process will walk through
# the project's entire directory structure.
add_subdirectory (Hello)
add_subdirectory (Demo)

Then create CMakeLists.txt files for each subdirectory specified. Here 
is the one for the ./Hello subdirectory:

# 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)

Finally create, the third and final CMakeLists.txt file in the ./Demo 
directory:

# Make sure the compiler can find include files from our Hello library.
include_directories (${HELLO_SOURCE_DIR}/Hello)

# Make sure the linker can find the Hello library once it is built.
link_directories (${HELLO_BINARY_DIR}/Hello)

# Add executable called "helloDemo" that is built from the source files
# "demo.cxx" and "demo_b.cxx". The extensions are automatically found.
add_executable (helloDemo demo.cxx demo_b.cxx)

# Link the executable to the Hello library.
target_link_libraries (helloDemo Hello)

CMake when executed in the top-level directory will process the 
CMakeLists.txt file and then descend into the listed subdirectories. 
Variables, include paths, library paths, etc. are inherited. Depending 
on the system, makefiles (Unix) or workspaces/projects (MSVC) will be 
built. The generated files can then be used in the usual way to build 
the code via corresponding tool.


More information about the CMake mailing list