Как target_include_directories понимает, какой заголовочный файл нужно использовать? Почему не нужно явно указывать имя заголовочного файла?
У меня есть такой каталог
C:.
│ CMakeLists.txt
│ main.cpp
│
├───include
│ dog.h
│ log.h
│ operations.h
│
└───src
dog.cpp
log.cpp
operations.cpp
Я хочу создать статическую библиотеку operations.lib. Для этого у меня есть такой CmakeList.txt
cmake_minimum_required(VERSION 3.5)
project (HelloApp
VERSION 0.0.1
DESCRIPTION "The leading Hello World App"
LANGUAGES CXX)
# static library creation
add_library(operations STATIC src/operations.cpp)
# вот тут возникает вопрос: как Cmake узнает, что в папке include нужен именно файл
# operations.h
target_include_directories(operations PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_features(operations PUBLIC cxx_std_20)
# static library creation
add_executable(HelloAppBinary main.cpp
src/dog.cpp
src/log.cpp)
message("The path is:" ${CMAKE_CURRENT_SOURCE_DIR})
target_include_directories(HelloAppBinary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_compile_features(HelloAppBinary PUBLIC cxx_std_20)
target_link_libraries(HelloAppBinary PUBLIC operations)
Статическая библиотека генерируется, с этим всё в порядке.
Вопрос в следующем: как Cmake узнает, что для создания библиотеки ему нужно заинклудить именно operations.h, а не оставшиеся заголовочные файлы (dog.h,log.h)? Мои догадка, что он это делает по прототипу функции (которая становится ему известной из-за тела фукнции в operations.cpp) , так ли это? Это ли является причиной, почему не нужно явно указывать имя заголовочного файла (operations.h)?