Как избежать ненужных зависимостей от заголовков - PullRequest
0 голосов
/ 21 сентября 2018

Я использую cmake версии 3.11.0.У меня есть следующая программа (в файле "cc"), где заголовки ah и bh пусты:

#include "a.h"
#if 0
#include "b.h"
#endif
int main()
{
  return 0;
}

и CMakeLists.txt:

add_executable(test c)

Я запускаю "cmake".настроить его, а затем "сделать".Все хорошо строит.Затем я нажимаю "bh" и снова запускаю "make" - Make перестраивает его!

Я имею в виду, заголовок bh исключен, любые изменения в нем могут быть проигнорированы.Почему есть зависимость от этого?Это по замыслу?Можно ли этого избежать?

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Итак, я мог бы переименовать "bh" в, скажем, "bv" и добавить

include_regular_expression("^.*[.](h|hpp|cpp|inl|inc)$")

, и мой заголовок "bv" будет исключен.Кажется, нет способа исключить определенные закономерности?Единственное, что нужно помнить, это принудительно полностью перестроить в следующий раз, когда мне понадобится "bv". Спасибо

0 голосов
/ 21 сентября 2018

Это известно как сканер зависимостей заголовка , который сканирует исходные файлы и извлекает имена заголовков, которые #include -это в него.

Поскольку это сканер, он не 'Попробуйте проверить #ifdef и другую логику, которая может привести к тому, что заголовок фактически не будет использоваться.

Вы можете управлять сканером зависимостей заголовка в CMake с помощью команды include_regular_expression .

Например, вы можете отключить сканер с помощью

include_regular_expression("^$") # Regular expressions matches empty string only

(Технически это не полностью отключает процесс сканирования, но отключает генерацию зависимости заголовка источника).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...