#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
. Если вы используете оба, они борются. Выберите один.