Recursive CMake search for header and source files

后端 未结 3 1180
臣服心动
臣服心动 2020-12-03 03:14

I am new to CMake and would like to ask if somebody can help in the following problem.

I have C++ source and header files in their respective folders and now, I wan

3条回答
  •  北海茫月
    2020-12-03 03:54

    You're probably missing one or more include_directories calls. Adding headers to the list of files in the add_executable call doesn't actually add then to the compiler's search path - it's a convenience feature whereby they are only added to the project's folder structure in IDEs.

    So, in your root, say you have /my_lib/foo.h, and you want to include that in a source file as

    #include "my_lib/foo.h"
    

    Then in your CMakeLists.txt, you need to do:

    include_directories(${CMAKE_SOURCE_DIR})
    

    If, instead you just want to do

    #include "foo.h"
    

    then in the CMakeLists.txt, do

    include_directories(${CMAKE_SOURCE_DIR}/my_lib)
    


    I should mention that file(GLOB...) is not the recommended way to gather your list of sources - you should really just add each file explicitly in the CMakeLists.txt. By doing this, if you add or remove a source file later, the CMakeLists.txt is modified, and CMake automatically reruns the next time you try and build. From the docs for file:

    We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed then the generated build system cannot know when to ask CMake to regenerate.

提交回复
热议问题