Прежде всего, я новичок в C ++, особенно в CMake, а также в Stack Overflow, поэтому я прошу прощения, если у вас возникли проблемы с пониманием моего вопроса (все вопросы и предложения приветствуются).
У меня естьC ++ проект, использующий CMake.Я хочу установить «глобальные» переменные (например, IP-адрес клиента и сервера) в одном месте и использовать эти переменные в своем коде.Проект сложный, он содержит более 50 CMakeList.txt
файлов.
Я следовал инструкциям по ссылке: https://cmake.org/cmake-tutorial/, " Добавление номера версии и настроенного файла заголовка ",Я добавил config.h.in
и добавил в файл следующее:
В config.h.in
добавил следующее:
-#define CLIENT_IP_ADDRESS "@CLIENT_IP_ADDRESS@"
-#define SERVER_IP_ADDRESS "@SERVER_IP_ADDRESS@"
В top из CMakeLists.txt
, добавил следующее:
set(SERVER_IP_ADDRESS "localhost")
set(CLIENT_IP_ADDRESS "localhost")
configure_file ("${PROJECT_SOURCE_DIR}/config.h.in" "${PROJECT_BINARY_DIR}/config.h")
После этого я могу получить файл config.h
в PROJECT_BINARY_DIR
, включить его в файлы cpp
и использовать как CLIENT_IP_ADDRESS
, так и SERVER_IP_ADDRESS
.
Что касается моего подхода, у меня есть несколько вопросов:
- Поскольку я сгенерировал
config.h
из своего top CMakeLists.txt
, это нормально, еслиЯ включаю сгенерированные файлы config.h
в cpp
, которые являются подкаталогами? - По какой-то причине не было необходимости вызывать:
include_directories(${PROJECT_BINARY_DIR}/)
в CMakeLists.txt
, которые создают файлы cpp
, где ясделали #include "config.h"
.Я сам исследую это, но, возможно, у кого-то есть подсказка, почему это так? - Это хороший способ установить «глобальные» переменные?Я также прочитал о
add_definitions
как возможность.Какой подход лучше (add_definitions
или config.h
)?