давайте просто скажем, что у меня есть структура папок, как это: < /p>
/root
/folder
-String.h
/folder2
-Json.h
< /code>
В моем проекте я добавляю /ровно к включенным путям и могу сделать: < /p>
#include "folder/String.h"
< /code>
И это работает. < /p>
Теперь я хочу попробовать с предварительным заголовком, поэтому я делаю pch.h и положил: < /p>
#include "folder/String.h"
< /code>
в нем. Прежде чем сделать это предварительно скомпилированный заголовок, если я просто сделаю: < /p>
#include "pch.h"
< /code>
это работает. «Папка/String.h» найдена, потому что этот заголовок вставлен в мой проект, и у меня уже есть набор каталогов включения. Однако теперь я делаю это Pch.h в предварительно скомпилированный заголовок с: < /p>
target_precompile_headers(main PRIVATE
"${PROJECT_SOURCE_DIR}/pch.h")
< /code>
А теперь это настоящий предварительный заголовок. Когда я пытаюсь скомпилировать это, я получаю ошибку, говоря, что она не может найти "/folder/string.h", и это правильно, потому что теперь предварительно скомпилированный заголовок собирается отдельно, и они включают пути, если они не существуют при их составлении. Кроме того, string.h может включать другие файлы, такие как /doffulder2/json.h, и в этом случае /корневая папка должна быть установлена в качестве каталога включения при составлении предварительно скомпилированного заголовка. Но target_precompile_headers в Cmake, похоже, не имеет для этого объекта.fatal error: 'iostream' file not found
< /code>
при использовании: < /p>
target_precompile_headers(${main_target_name} PRIVATE
"${COMMON_SOURCE_DIR}/std_pch.h"
Подробнее здесь: https://stackoverflow.com/questions/797 ... s-in-cmake