#c #c #cmake
#c #c #cmake
Вопрос:
Можно ли использовать переменную CMake, чтобы решить, какой файл заголовка будет включен в программу на c. Я безуспешно пробовал следующее:
header_a.h -> это файл, содержащий следующий код
#if (@CMAKE_VAR@ == "B")
#include header.b
#else
#include header.c
#endif
Я также попробовал следующее с теми же неудачными результатами:
header_a.h
#ifdef CMAKE_VAR
#define CMAKE_VAR_SELECTION CMAKE_VAR
#endif
#if (CMAKE_VAR_SELECTION == "B")
#include header.b
#else
#include header.c
#endif
Заранее спасибо за вашу помощь.
Комментарии:
1. Использовали ли вы
configure_file
в своем заголовке для расширения переменных cmake?2. Вы что-нибудь делали на стороне CMake? Компилятор C и CMake не будут волшебным образом взаимодействовать. Я не знаю, откуда у вас эта
@CMAKE_VAR@
идея.
Ответ №1:
Вы можете использовать file(WRITE ...)
команду CMake для записи заголовка, чтобы он содержал правильное объявление include:
if (${CMAKE_VAR} EQUAL "B")
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/header_a.h"
"
#include <header.b>
"
)
else()
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/myheader.hpp"
"
#include <header.c>
"
)
endif()
Ответ №2:
что вы можете сделать, так это определить соответствующий макрос для кода C / C из CMake.
# your CMAKE variable
set(CMAKE_VAR "B")
# that would define macro constant CMAKE_VAR_B
add_definitions(-DCMAKE_VAR_${CMAKE_VAR})
Затем в коде вы можете использовать предложенный вами
#if defined(CMAKE_VAR_B)
#include header.b
#else
#include header.c
#endif