Answers.Body: <p>cmake, allows you to define variables, these variables can be filled with strings.
  These strings can be tools or files.
  Additonally it allows for conditional compiling, setting version numbers and library injection.
  I would have a look at: <a href="https://cmake.org/cmake-tutorial/" rel="nofollow noreferrer">https://cmake.org/cmake-tutorial/</a></p>
  
  <p>Now on how to explain:
  Cmake utilizes a script language to make building projects much easier. It has a feature set that does specific things. Like requiring specific versions of files. 
  How to make it "fun" I dont know. But you could split your class in groups that each  have to create a header cmake replacement script, with a specific variable name. And a program that does anything they like, but has to use the defines. For example DEBUG
  Then each group has to create a list of substitutions, and they share the substitutions. While executing the diffrent substitutions, they have to determine why something breaks or works although it shouldnt. This can be used to examplify, how the header operations work, and also how wrong or malicous usage can wreak havoc in their project.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-12-22T10:09:57.357Z
Answers.LastActivityDate: 2017-12-22T10:09:57.357Z
Answers.UserDisplayName: Git
Body: <p>As a pilot project (which was delayed by an incredible amount, seeing as it's starting 8 weeks after it was meant to), my school grouped together a few kids (high school, they know basic OOP and work in Java) and we teach them a bit about C and working in C.</p>
  
  <p>We use CLion, which in turn uses CMake to organize header files. Naturally, the more inquisitive students asked what cmake does. (Like a <a href="https://en.wikipedia.org/wiki/Dorothy_Dixer" rel="noreferrer">plant</a>, because it is in the curriculum anyway).</p>
  
  <p>So, I was trying to think of ways to explain what cmake does, in an analogy. Because CMake can get exponentially more complicated as one adds modules, I am focusing on analogies that simplify this, and hopefully present in an enjoyable way (such as a demonstration or student participation).</p>
  
  <p>The idea is to explain how CMake can be useful for arranging header files.</p>
  
  <p>So my question is what analogies can I use, which preferably include student participation?</p>
  
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-12-19T15:57:09.937Z
Comments.Text: the best advice you can get is: read the manual for `cmake`,  then use google to search for examples, etc.
Comments.UserDisplayName: user3629249
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-12-19T21:19:56.610Z
Comments.Text: What does “organize header files” mean?
Comments.UserDisplayName: Gilles 'SO- stop being evil'
Comments.ContentLicense: CC BY-SA 3.0
Comments.CreationDate: 2017-12-24T23:03:23.947Z
Comments.Text: I am new to `cmake`, I just looked it up. It seems to be to me a tool for making makefiles. So a **meta make**. Meta is my favourite Greek word. It has two meanings, the first is beyond, the second has no equivalent in English. It sort of doubles the following word, e.g. meta thinking, is thinking about thinking; a meta language is a language used to describe languages; and a meta make, is a make for making a make.
Comments.UserDisplayName: ctrl-alt-delor
Tags: <lesson-ideas><c><cmake>
Title: Enjoyable and\or fun way to explain cmake
ThreadText: # Enjoyable and\or fun way to explain cmake
  
  (Asked by: username_0 on 2017-12-19)
  
  As a pilot project (which was delayed by an incredible amount, seeing as it's starting 8 weeks after it was meant to), my school grouped together a few kids (high school, they know basic OOP and work in Java) and we teach them a bit about C and working in C.
  
  We use CLion, which in turn uses CMake to organize header files. Naturally, the more inquisitive students asked what cmake does. (Like a [plant](https://en.wikipedia.org/wiki/Dorothy_Dixer), because it is in the curriculum anyway).
  
  So, I was trying to think of ways to explain what cmake does, in an analogy. Because CMake can get exponentially more complicated as one adds modules, I am focusing on analogies that simplify this, and hopefully present in an enjoyable way (such as a demonstration or student participation).
  
  The idea is to explain how CMake can be useful for arranging header files.
  
  So my question is what analogies can I use, which preferably include student participation?
  
  **Tags:** lesson-ideas, c, cmake
  
  > **Comments:**
  > **username_1**: the best advice you can get is: read the manual for `cmake`,  then use google to search for examples, etc.  
  > **username_2**: What does “organize header files” mean?  
  > **username_3**: I am new to `cmake`, I just looked it up. It seems to be to me a tool for making makefiles. So a **meta make**. Meta is my favourite Greek word. It has two meanings, the first is beyond, the second has no equivalent in English. It sort of doubles the following word, e.g. meta thinking, is thinking about thinking; a meta language is a language used to describe languages; and a meta make, is a make for making a make.  
  
  ---
  
  ## 1 answers
  
  ### Answer by username_4 on 2017-12-22. Score: 2
  
  cmake, allows you to define variables, these variables can be filled with strings.
  These strings can be tools or files.
  Additonally it allows for conditional compiling, setting version numbers and library injection.
  I would have a look at: <https://cmake.org/cmake-tutorial/>
  
  Now on how to explain:
  Cmake utilizes a script language to make building projects much easier. It has a feature set that does specific things. Like requiring specific versions of files.
  How to make it "fun" I dont know. But you could split your class in groups that each have to create a header cmake replacement script, with a specific variable name. And a program that does anything they like, but has to use the defines. For example DEBUG
  Then each group has to create a list of substitutions, and they share the substitutions. While executing the diffrent substitutions, they have to determine why something breaks or works although it shouldnt. This can be used to examplify, how the header operations work, and also how wrong or malicous usage can wreak havoc in their project.
  
  
  ---
  
  