title: CMake Function "not declared in this scope" Error
body: <p>I am brand new to CMake and have been reading through blogs to get this to work.  I had a cmake file working when all the files were in the same directory but can't seem to get this to work - the include dir was giving me trouble. In this last attempted I was referencing <a href="https://stackoverflow.com/questions/56462415/cmake-error-cannot-determine-link-language-for-target">this</a> stack overflow thread.  This was the closest I came to getting this to work.  Please help.</p>
  <p><strong>File Tree</strong></p>
  <pre><code>$ tree
  .
  ├── CMakeLists.txt
  ├── include
  │   ├── CMakeLists.txt
  │   └── math.h
  ├── src
  │   ├── CMakeLists.txt
  │   └── math.c
  └── testy
      ├── CMakeLists.txt
      └── math.cpp
  
  3 directories, 7 files
  </code></pre>
  <p><strong>CMake Files</strong></p>
  <pre><code>$ more CMakeLists.txt
  cmake_minimum_required(VERSION 3.1)
  project(iamtesting)
  enable_testing()
  add_subdirectory(include)
  add_subdirectory(src)
  add_subdirectory(testy)
  </code></pre>
  <pre><code>$ more include/CMakeLists.txt
  add_library(include INTERFACE)
  target_include_directories(include INTERFACE ./)
  </code></pre>
  <pre><code>$ more src/CMakeLists.txt
  add_library(src STATIC math.c)
  target_include_directories(src PUBLIC ./)
  </code></pre>
  <pre><code>$ more testy/CMakeLists.txt
  set(TEST_EXE_NAME math)
  add_executable(${TEST_EXE_NAME} math.cpp)
  target_include_directories(${TEST_EXE_NAME} PUBLIC ./)
  target_link_libraries(${TEST_EXE_NAME} src)
  add_test(NAME &quot;testDatabase&quot; COMMAND ${TEST_EXE_NAME})
  </code></pre>
  <p><strong>CMake</strong></p>
  <pre><code>$ cmake CMakeLists.txt
  -- The C compiler identification is GNU 7.5.0
  -- The CXX compiler identification is GNU 7.5.0
  -- Check for working C compiler: /usr/bin/cc
  -- Check for working C compiler: /usr/bin/cc -- works
  -- Detecting C compiler ABI info
  -- Detecting C compiler ABI info - done
  -- Detecting C compile features
  -- Detecting C compile features - done
  -- Check for working CXX compiler: /usr/bin/c++
  -- Check for working CXX compiler: /usr/bin/c++ -- works
  -- Detecting CXX compiler ABI info
  -- Detecting CXX compiler ABI info - done
  -- Detecting CXX compile features
  -- Detecting CXX compile features - done
  -- Configuring done
  -- Generating done
  -- Build files have been written to: /home/jason/gtest
  </code></pre>
  <p><strong>Make</strong></p>
  <pre><code>$ make
  Scanning dependencies of target src
  [ 25%] Building C object src/CMakeFiles/src.dir/math.c.o
  /home/jason/gtest/src/math.c: In function ‘main’:
  /home/jason/gtest/src/math.c:5:24: warning: implicit declaration of function ‘sum’ [-Wimplicit-function-declaration]
     printf(&quot;10+20=%d\n&quot;, sum(10,20));
                          ^~~
  [ 50%] Linking C static library libsrc.a
  [ 50%] Built target src
  Scanning dependencies of target math
  [ 75%] Building CXX object testy/CMakeFiles/math.dir/math.cpp.o
  In file included from /usr/include/gtest/gtest.h:1874:0,
                   from /home/jason/gtest/testy/math.cpp:1:
  /home/jason/gtest/testy/math.cpp: In member function ‘virtual void widget_ok_Test::TestBody()’:
  /home/jason/gtest/testy/math.cpp:5:13: error: ‘sum’ was not declared in this scope
     ASSERT_EQ(sum(1, 1), 2);
               ^
  /home/jason/gtest/testy/math.cpp:5:3: error: template argument 1 is invalid
     ASSERT_EQ(sum(1, 1), 2);
     ^
  testy/CMakeFiles/math.dir/build.make:62: recipe for target 'testy/CMakeFiles/math.dir/math.cpp.o' failed
  make[2]: *** [testy/CMakeFiles/math.dir/math.cpp.o] Error 1
  CMakeFiles/Makefile2:158: recipe for target 'testy/CMakeFiles/math.dir/all' failed
  make[1]: *** [testy/CMakeFiles/math.dir/all] Error 2
  Makefile:94: recipe for target 'all' failed
  make: *** [all] Error 2
  </code></pre>
  <p><strong>Src Files</strong></p>
  <pre><code>$ more src/math.c
  #include &lt;stdio.h&gt;
  #include &quot;math.h&quot;
  
  int main() {
    printf(&quot;10+20=%d\n&quot;, sum(10,20));
    return 0;
  }
  
  int sum(int x, int y) {
      return x + y;
  }
  </code></pre>
  <pre><code>$ more include/math.h
  #define _MATH_H_
  
  int sum(int, int);
  </code></pre>
  <pre><code>$ more src/math.c
  #include &lt;stdio.h&gt;
  #include &quot;math.h&quot;
  
  int main() {
    printf(&quot;10+20=%d\n&quot;, sum(10,20));
    return 0;
  }
  
  int sum(int x, int y) {
      return x + y;
  }
  </code></pre>
  <pre><code>$ more testy/math.cpp
  #include &quot;gtest/gtest.h&quot;
  #include &quot;math.h&quot;
  
  TEST(widget, ok) {
    ASSERT_EQ(sum(1, 1), 2);
  }
  
  int main(int argc, char **argv) {
      testing::InitGoogleTest(&amp;argc, argv);
      return RUN_ALL_TESTS();
  }
  </code></pre>