CMake Build System

  1. Managing Dependencies
    1. Finding Installed Packages
      1. find_package Command
        1. Purpose and Syntax
          1. Required vs. Optional Packages
            1. Version Specifications
            2. Module Mode vs. Config Mode
              1. Module Mode Search Process
                1. Config Mode Search Process
                  1. Search Path Priorities
                  2. Writing Find Modules
                    1. Find Module Structure
                      1. Required Variables
                        1. Creating Imported Targets
                          1. Handling Components
                          2. Writing Config Files
                            1. Config File Structure
                              1. Exporting Targets
                                1. Version Files
                                2. Imported Targets
                                  1. Using Imported Targets
                                    1. Target Properties
                                      1. Interface Properties
                                    2. Including Sub-projects
                                      1. add_subdirectory Command
                                        1. Adding Subdirectories to the Build
                                          1. Directory Structure Considerations
                                            1. Binary Directory Specification
                                            2. Variable Scoping with Subdirectories
                                              1. Scope Inheritance
                                                1. Passing Variables Between Directories
                                                  1. PARENT_SCOPE Option
                                                2. Fetching Dependencies at Configure Time
                                                  1. FetchContent Module
                                                    1. Purpose and Use Cases
                                                      1. Advantages over ExternalProject
                                                      2. FetchContent_Declare Command
                                                        1. Declaring Dependencies
                                                          1. Git Repositories
                                                            1. URL Downloads
                                                              1. Local Directories
                                                              2. FetchContent_MakeAvailable Command
                                                                1. Downloading and Adding Dependencies
                                                                  1. Population Process
                                                                  2. FetchContent Advanced Usage
                                                                    1. FetchContent_GetProperties Command
                                                                      1. FetchContent_Populate Command
                                                                        1. Custom Population Steps
                                                                      2. ExternalProject Module
                                                                        1. Purpose and Use Cases
                                                                          1. Build-Time Dependencies
                                                                            1. Differences from FetchContent
                                                                            2. ExternalProject_Add Command
                                                                              1. Basic Syntax
                                                                                1. Download Step Configuration
                                                                                  1. Configure Step Configuration
                                                                                    1. Build Step Configuration
                                                                                      1. Install Step Configuration
                                                                                      2. Key Arguments
                                                                                        1. URL and Git Options
                                                                                          1. SOURCE_DIR and BINARY_DIR
                                                                                            1. CMAKE_ARGS
                                                                                              1. BUILD_COMMAND
                                                                                                1. INSTALL_COMMAND
                                                                                                  1. LOG Options
                                                                                                  2. Integration with Main Build
                                                                                                    1. Dependencies and Ordering
                                                                                                      1. Using ExternalProject Outputs