summaryrefslogtreecommitdiffstats
path: root/Web/HTML/Examples.html
blob: 2c2a89765fd129a45c80bc3c1dc83fb0d1583c0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>

<!--#include virtual="/CMake/HTML/Head.html"-->

<body bgcolor="#FFFFFF" leftmargin=0 topmargin=0 text="black" link="#FFFFFF" 
vlink="#000000" alink="#000000">

<!--#include virtual="/CMake/HTML/Table.html"-->

<tr>
<!--#include virtual="/CMake/HTML/SideBar.html"-->

    <td width="550" valign="top" bgcolor="#FFFFFF">
    <div align="left">
    <font size=5>The following example </font> demonstrates some key ideas
    of CMake. (You may wish to download this
    <a href="/CMake/HTML/cmakeExample.tar.gz">example code</a> and try it
    out for yourself.)
    <p>
    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. A total of three CMakeList.txt files are 
    created: one for each directory.
    <p>
    The first, top-level directory contains the following CMakeLists.txt file.
    <pre>
# 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}.
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.
SUBDIRS(Hello Demo)
    </pre>
    Then for each subdirectory listed in the SUBDIRS command, CMakeLists.txt 
    files are created. In the ./Hello directory, the following CMakeLists.txt
    file is created:
    <pre>
# 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)
    </pre>
    Finally, in the ./Demo directory, the third and final CMakeLists.txt file
    is created:
    <pre>
# 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 demo_b)

# Link the executable to the Hello library.
TARGET_LINK_LIBRARIES(helloDemo Hello)
    </pre>
    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. These can then be used in the usual way to build the code.
    </div>
    </td>
</tr>

</table>

</td>
</tr>
</table>

</body>
</html>