


It also results in having to repeat the directory structure, which reduces the benefit of structuring source files into directories in the first place. When the number of source files grows large and they get distributed over a number of subdirectories, possibly nested to multiple levels, this quickly becomes unwieldly. Eg: add_executable(myApp src1.cpp src2.cpp) Typically, developers first learn CMake in a very simple manner, defining a target by listing the source files directly in the add_executable() or add_library() command itself. Source files can be added to third party project targets without having to modify the third party project files.Source files gain the ability to become part of a target’s interface.Dependency information can be specified closer to where the actual dependencies exist in the directory hierarchy.It can lead to cleaner and more concise CMakeLists.txt project files.While the CMake documentation succintly describes what target_sources() does, it fails to highlight just how useful the new command is and why it promotes better CMake projects: With CMake 3.1, a new command target_sources() was introduced which provides the missing piece among the various target_. In such projects, traditional approaches usually either list all source files at the top-most level or build up the list of source files in a variable and pass that to add_library(), add_executable(), etc. These files may be distributed across various subdirectories, which may themselves be nested multiple levels deep. In all but trivial CMake projects, it is common to find targets built from a large number of source files. Key updates are noted within the article. Updated December 2018: Parts of this article have been reworked to account for improvements made with the CMake 3.13.0 release.
