Как передать переменные непосредственно компилятору и получить к ним доступ внутри code CMake?

#c #cmake

#c #cmake

Вопрос:

Я скомпилировал пару переменных в своем CMakeLists.txt , к которым я хочу получить доступ и отобразить в виде строки внутри моего кода. Я получаю к ним доступ, используя некоторые дополнительные заголовочные файлы.

Есть ли способ передать их непосредственно компилятору и при этом иметь возможность использовать их внутри моих классов?

Я думаю, что мне придется где-то там использовать некоторую строку.

CMakeLists.txt код:

 add_definitions("-DGIT_COMMIT_HASH=${GIT_COMMIT_HASH}")

configure_file(
  ${CMAKE_SOURCE_DIR}/include/version.h.in
  ${CMAKE_BINARY_DIR}/generated/version.h
    )

include_directories(
    src/
    ${CMAKE_BINARY_DIR}/generated
)
  

version.h.in код:

 #ifndef VERSION_H
#define VERSION_H

#define GIT_COMMIT_HASH "@GIT_COMMIT_HASH@"

#endif
  

автоматически сгенерированная версия.h-код:

 #ifndef VERSION_H
#define VERSION_H

#define GIT_COMMIT_HASH "a02cab8"

#endif
  

main.cpp код:

 #include <version.h>

printf("GIT COMMIT HASH: %s", GIT_COMMIT_HASH);
  

Для справки я следовал этому руководству

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

1. Значит, код, который вы показали, у вас не работает? Что с этим не так? Вы сделали это — передали макрос в качестве аргумента компилятору и настроили файл — это было ваше намерение? Можете ли вы пояснить, что именно означает «передавать переменные непосредственно компилятору» и «получать к ним доступ внутри code CMake»? Как получить к ним доступ?

2. Это работает, я просто хочу найти способ сделать это без дополнительных заголовочных файлов.

3. ? Итак, если вы хотите сделать это без дополнительного заголовка, удалите его.

4. Команда add_definitions фактически передает переменную непосредственно компилятору , поэтому вам не нужен дополнительный заголовок. Что не так, когда вы используете эту команду без заголовка?

5. -DXXX=YYY в командной строке определяется макрос с именем, XXX которое расширяется до YYY . #define XXX ZZZ в исходном файле определяется макрос с именем XXX , который расширяется до ZZZ . Если вы используете оба, они борются. Выберите один.