define игнорируется target_compile_definitions - PullRequest
0 голосов
/ 06 мая 2020

Я собираюсь создать библиотеку, и мне нужно передать два определения этой сборке, но cmake target_compile_definitions () скремблирует их таким образом, что делает их непригодными для использования.

Два определения:

  • -D'_LIB_EXCEPTION_ABI=__attribute__((visibility("default")))'
  • -D'_LIB_FALLTHROUGH()=((void)0)'

К сожалению, первое из них переводится в ( в командной строке):

  • -D'_LIB_EXCEPTION_ABI="\__attribute__((visibility(\"default\")))'"

А второй в командной строке вообще отсутствует.

1 Ответ

2 голосов
/ 06 мая 2020

CMake имеет известные ограничения на то, какие определения компиляции могут быть.

Среди этих ограничений есть определения в стиле функции (_LIB_FALLTHROUGH()) и те, которые содержат двойные кавычки (").

Вместо того, чтобы пытаться преодолеть эти ограничения, рекомендуется создать отдельный файл заголовка со следующими определениями компиляции:

#define _LIB_EXCEPTION_ABI __attribute__((visibility("default")))
#define _LIB_FALLTHROUGH() ((void)0)

This файл заголовка может быть включен с параметром компилятора -include (g cc) или параметром /FI (Visual Studio).

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