Как использовать переменную CMake, чтобы выбрать, какой файл заголовка включить в программу на c

#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