Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Post History
include_directories works on all targets in the current CMakeLists.txt file, whereas target_include_directories only adds them for the specified target. include_directories is fine to use for simp...
Answer
#2: Post edited
- `include_directories` works on all targets in the current `CMakeLists.txt` file, whereas `target_include_directories` only adds them for the specified target.
`include_directories` is fine to use for simple projects, but `target_include_directories` is better for more complex ones because it is more explicit, so you don't accidentally add include directories to targets that you didn't intend to, and it makes it easier to refactor build files, since it is clear which commands you need to modify based on their targets.
- `include_directories` works on all targets in the current `CMakeLists.txt` file, whereas `target_include_directories` only adds them for the specified target.
- `include_directories` is fine to use for simple projects, but `target_include_directories` is better for more complex ones because it is more explicit, so you don't accidentally add include directories to targets that you didn't intend to, and it makes it easier to refactor build files, since it is clear which commands you need to modify based on their targets.
- `target_include_directories` also supports `INTERFACE`, `PUBLIC` and `PRIVATE` keywords, which control how the include directories are propagated to children that depend on the target. For example, if you have a target which needs additional headers to build against, you can use `PUBLIC` for those directories so that anything linking against the target also includes those directories. Otherwise, you can use `PRIVATE` so those directories aren't propagated to children.
#1: Initial revision
`include_directories` works on all targets in the current `CMakeLists.txt` file, whereas `target_include_directories` only adds them for the specified target. `include_directories` is fine to use for simple projects, but `target_include_directories` is better for more complex ones because it is more explicit, so you don't accidentally add include directories to targets that you didn't intend to, and it makes it easier to refactor build files, since it is clear which commands you need to modify based on their targets.