Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • CMake CMake
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 4,103
    • Issues 4,103
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 18
    • Merge requests 18
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • External wiki
    • External wiki
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CMakeCMake
  • CMakeCMake
  • Issues
  • #19891
Closed
Open
Issue created Oct 29, 2019 by Brad King@brad.kingOwner

Introduce a declarative specification format

CMake's imperative language is currently used both for scripting and for declaring targets/sources/etc. for the build system. Targets are defined by imperative commands like add_library whose arguments can come from arbitrary imperative logic. While humans may be able to make changes, it is difficult for tooling to do so in this format (e.g. to add a source file through an IDE). Furthermore, many projects have created their own macro/function-based systems to offer a more declarative style.

Several alternative imperative languages have been proposed for CMake, but using a new imperative language will not solve this problem. Instead we should consider introducing a declarative specification format that can support the majority of specification of buildsystem targets and sources. The format will then be accessible to tooling, and can also be loaded by CMake's imperative language for evaluation of conditions for the target environment.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking