Это не ограничение cmake или make, все компиляторы C ++ ищут заголовки из отсортированного списка папок, беря первый найденный заголовочный файл.
Вы можете изменить этот список с помощью папки include параметры и они будут искать в порядке их добавления. Это может быть очень трудно достичь, потому что порядок поиска отличается в зависимости от того, используют ли ваши старые заголовки #include "file.h"
или #include <file.h>
. Подробнее об этом читайте в руководстве к вашему компилятору или здесь .
Если в вашем устаревшем заголовке используется #include <>
Возможно, проще всего было бы создать собственную папку включения в папку сборки для каждой конфигурации и убедитесь, что эта папка имеет приоритет. Затем скопируйте только фиктивный заголовок в эту папку.
file(COPY test/mymock1.h DESTINATION mock/)
target_include_directories(
mytest BEFORE
PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/mock
)
Если ваш устаревший заголовок использует #include ""
Вы облажались, потому что компилятор сначала ищет в физической папке, в которой находится другой заголовок Вы должны убедиться, что ваш фиктивный заголовок заменяет нематериальный заголовок в каталоге, вероятно, так же, как вы уже делаете.