# Build with separate src, include and build subdirectories

**URL:** https://discourse.cmake.org/t/build-with-separate-src-include-and-build-subdirectories/7961
**Category:** Code
**Created:** [April 23, 2023, 10:59am UTC](https://discourse.cmake.org/t/build-with-separate-src-include-and-build-subdirectories/7961 "2023-04-23T10:59:20Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![timie\_milie](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/t/90ced4/32.png) [@timie\_milie](https://discourse.cmake.org/u/timie_milie)
#### Post date: [April 23, 2023, 10:59am UTC](https://discourse.cmake.org/t/build-with-separate-src-include-and-build-subdirectories/7961/1 "2023-04-23T10:59:21Z")

</div>

Hi I’d like to create a CMake managed project with the following example directory structure:

root - mainly empty, perhaps just a cmaklistfiles.txt file  
root/src/main.cpp  
root/include/main.hpp  
root/build/

Where root is the ‘project directory’

I’d like the main.cpp to be able to just #include “main.hpp” without having to use do #include “include/main.hpp”

Ideally one CMakeListFiles.txt in the root directory, but I can like with sub dirs.  
This is an exectuable. Might want to end up adding a root/test dir too.

Modern version of CMake, e.g. 3.1+  
Using make on linux and optionally nmake on windoze FWIW.

Apologies if this is documented or answered elsewhere - just link me the answer if that’s the case.

Tim.

---

<div class="post-metadata">

### Author: ![fenrir](https://discourse.cmake.org/user_avatar/discourse.cmake.org/fenrir/32/734_2.png) [@fenrir](https://discourse.cmake.org/u/fenrir)
#### Post date: [April 24, 2023, 6:54am UTC](https://discourse.cmake.org/t/build-with-separate-src-include-and-build-subdirectories/7961/2 "2023-04-24T06:54:22Z")

</div>

I’d go with:  
root/CMakeLists.txt:

```cmake
<usual boilerplate>
...
add_library(build_settings INTERFACE)
target_include_directories(build_settings INTERFACE include)
#here you could add other stuff to "build_settings"
...
add_subdirectory(src)

```

And then in root/src/CMakeLists.txt:

```cmake
...
add_executable(my_exec ...)
target_link_libraries(my_exec PRIVATE build_settings)
...

```

There may be typos - I’ve typed it from memory
