summaryrefslogtreecommitdiffstats
path: root/docs/dev_guide/3-project-architecture.md
blob: aefaca3cdab956ee6c49b9ebd0bbd13ec6be4672 (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
# Project architecture

CMake projects follow a typical file hierarchy.
The following tree structure represents a typical CMake project
directory structure:

```tree
<project-root-path>
|
├── CMakeLists.txt

├── autobuild/
│   ├── agl
│   │   └── autobuild
│   ├── linux
│   │   └── autobuild
│   └── windows
│       └── autobuild
├── conf.d/
│   ├── packaging/
│   │   ├── rpm
│   │   │   └── package.spec
│   │   └── deb
│   │       ├── package.dsc
│   │       ├── debian.package.install
│   │       ├── debian.changelog
│   │       ├── debian.compat
│   │       ├── debian.control
│   │       └── debian.rules
│   ├── cmake
│   │   ├── 00-debian-osconfig.cmake
│   │   ├── 00-suse-osconfig.cmake
│   │   ├── 01-default-osconfig.cmake
│   │   └── config.cmake
│   └── wgt
│       ├── icon.png
│       └── config.xml.in
├── <target>
│   └── <files>
├── <target>
│   └── <file>
└── <target>
    └── <files>
```

| File or Directory | Parent | Description |
|----|----|----|
| *root_path* | n/a | CMake project root path. Holds the master CMakeLists.txt file and all general project files.
| CMakeLists.txt | The master CMakeLists.txt file.
| autobuild/ | *root_path* | Scripts generated from app-templates to build packages the same way for differents platforms.
| conf.d/ | *root_path* | Holds needed files to build, install, debug, and package an AGL application project.
| packaging/ | confd/ | Contains output files used to build packages.
| cmake/ | confd/ | Minimally contains the config.cmake file, which is modified from the sample provided in the app-templates submodule.
| wgt/ | confd/ | Contains config.xml.in and optionaly the test-config.xml.in template files that are modified from the sample provided with the CMake module for the needs of the project.  For more details, see the config.xml.in.sample and test-config.xml.in.sample files.
| *target* | *root_path* | A target to build, which is typically a library or executable.

When building projects using CMake, the build process automatically detects
the `CMakeLists.txt` and `*.cmake` files.
To help with this process, the `PROJECT_SRC_DIR_PATTERN` variable
is used for recursive pattern searching from the CMake project's
*root_path* downward.
Each sub-folder below *root_path* in the project is searched and included
during compilation.
The directories matching the pattern `PROJECT_SRC_DIR_PATTERN` variable
are scanned.

**NOTE:** The `PROJECT_SRC_DIR_PATTERN` variable defaults to "*".

When the `CMakeLists.txt` file is found, the directory in which it is found
is automatically added to the CMake project.

Similarly, when a file whose extension is `.cmake` is found, the directory in
which that file resides is also added to the CMake project.