Как добавить включить путь поиска в подкаталог без ’CMakeLists.txt-в СМаке?

#c #c 11 #cmake

#c #c 11 #cmake

Вопрос:

У меня есть проект CMake со структурой каталогов ниже:

 . ├── b.h ├── CMakeLists.txt ├── src └── test  ├── CMakeLists.txt  ├── impl  └── include  └── a.h  

Я хочу включить b.h , a.h но CMake не может найти b.h a.h . Я знаю, что это неправильно, если я включаю a.h в b.h то время как включаю b.h a.h . Однако я уверен, что a.h это будет использоваться только в файлах в test/impl .

Содержимое ./CMakeLists.txt просто добавляется test/ в качестве подкаталога.

Содержимое ./test/CMakeLists генерирует исполняемый объект, который использовал googletest.

Есть ли что-нибудь, что я могу включить b.h , a.h не добавляя дополнительный файл CMake ./test/include ?

./CMakeLists.txt

 file(GLOB_RECURSE SOURCES src/*.cpp)  add_library(core SHARED ${SOURCES}) target_include_directories(core PUBLIC ${PROJECT_SOURCE_DIR})  add_subdirectory(test)   

./test/CMakeLists.txt

 file(GLOB_RECURSE SOURCES impl/*.cpp)  enable_testing()  add_executable(  core_test  ${SOURCES} ) target_link_libraries(  core_test  gtest_main )  include(GoogleTest) gtest_discover_tests(core_test)  target_include_directories(core_test PUBLIC ${PROJECT_SOURCE_DIR})  

Комментарии:

1. Команда target_include_directories добавляет те каталоги include, которые вы в ней указываете. Таким образом, вы можете вызвать эту команду с ${PROJECT_SOURCE_DIR}/test/include последним аргументом, чтобы она добавлялась test/include как каталог включения.

2. Похоже, это используется для включения a.h в b.h . Что я хочу сделать, так это включить файл снаружи( b.h ) из файла внутри( a.h ). Есть ли какие-нибудь идеи?

3. Что ж, похоже, есть компромисс. Я добавляю файл cpp в файл ./test/impl cpp и включаю a.h его в файл cpp. Тогда b.h можно было бы найти в a.h . Однако возможно ли не добавлять дополнительный файл cpp, а только изменять файл CMake, чтобы реализовать это?