1
0
mirror of synced 2024-12-22 12:40:00 +01:00

Adding new TREE folder option

This commit is contained in:
Henry Fredrick Schreiner 2019-03-01 13:07:48 +01:00
parent 6de6e33ff5
commit df0b588562
2 changed files with 25 additions and 5 deletions

View File

@ -2,7 +2,7 @@
In general, IDEs are already supported by a standard CMake project. There are just a few extra things that can help IDEs perform even better. In general, IDEs are already supported by a standard CMake project. There are just a few extra things that can help IDEs perform even better.
## Folders ## Folders for targets
Some IDEs, like Xcode, support folders. You have to manually enable the `USE_FOLDERS` global property to allow CMake to organize your files by folders: Some IDEs, like Xcode, support folders. You have to manually enable the `USE_FOLDERS` global property to allow CMake to organize your files by folders:
@ -16,13 +16,32 @@ Then, you can add targets to folders when after you create them:
set_property(TARGET MyFile PROPERTY FOLDER "Scripts") set_property(TARGET MyFile PROPERTY FOLDER "Scripts")
``` ```
Folders can be nested with `/`. You can control how files show up in each folder with regular expressions or explicit listings in [`source_group`](https://cmake.org/cmake/help/latest/command/source_group.html): Folders can be nested with `/`.
```
source_group("Source Files" REGULAR_EXPRESSION ".*\\.c[ucp]p?")
You can control how files show up in each folder with regular expressions or explicit listings in [`source_group`](https://cmake.org/cmake/help/latest/command/source_group.html):
## Folders for files
You can also control how the folders inside targets appear. There are two ways, both using the «command:source_group» command. The traditional way is
```cmake
source_group("Source Files\\New Directory" REGULAR_EXPRESSION ".*\\.c[ucp]p?")
``` ```
Take a look at [this blog post][sorting] for tips on ways to automatically sort folders to match your source code layout. You can explicitly list files with `FILES`, or use a `REGULAR_EXPRESSION`. This way you have complete control over the folder structure. However, if your on-disk layout is well designed, you might just want to mimic that. In CMake 3.8+, you can do so very easily with a new version of the «command:source_group» command:
```cmake
source_group(TREE /full/path/to/start/at PREFIX "Header Files" FILES ${FILE_LIST})
```
For the `TREE` option, you should usually give a full path starting with something like `${CMAKE_CURRENT_SOURCE_DIR}/`(because the command interprets paths relative to the build directory).
The prefix tells you where it puts it into the IDE structure, and the `FILES` option takes a list of files.
CMake will strip the `TREE` path from the `FILE_LIST` path, it will add `PREFIX`, and that will be the IDE folder structure.
> Note: If you need to support CMake < 3.8, I would recommend just protecting the above command, and only supporting nice folder layout on CMake 3.8+. For older methods to do this folder layout, see
> [this blog post][sorting].
## Running with an IDE ## Running with an IDE

View File

@ -97,6 +97,7 @@ This adds CUDA as a language, as well as `cxx_std_11` as a compiler meta-feature
* `COMPILE_FLAGS` now supports generator expression * `COMPILE_FLAGS` now supports generator expression
* `*_CPPLINT` added * `*_CPPLINT` added
* `$<IF:cond,true-value,false-value>` added (wow!) * `$<IF:cond,true-value,false-value>` added (wow!)
* `source_group(TREE` added (finally allowing IDE's to reflect the project folder structure!)
## [CMake 3.9][] : IPO ## [CMake 3.9][] : IPO