Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用CMake变量选择要包含在c程序中的头文件_C++_C_Cmake - Fatal编程技术网

C++ 如何使用CMake变量选择要包含在c程序中的头文件

C++ 如何使用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 我还尝试了以下方法,但同样失败: 标题_a.h #ifdef CMAKE_VAR #define CMAKE_VAR_SELECTION CMAKE_VAR #endif #if

是否可以使用CMake变量来决定c程序中包含的头文件。 我尝试了以下方法,但没有成功:

header_a.h->是包含以下代码的文件

#if (@CMAKE_VAR@ == "B")
    #include header.b
#else
    #include header.c
#endif
我还尝试了以下方法,但同样失败: 标题_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

提前感谢您的帮助。

您所能做的就是为CMake中的C/C++代码定义相应的宏

# 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
您可以使用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()
if(${CMAKE_VAR}等于“B”)
文件(写入“${CMAKE\u CURRENT\u SOURCE\u DIR}/header\u a.h”
"
#包括
"
)
else()
文件(写入“${CMAKE\u CURRENT\u SOURCE\u DIR}/myheader.hpp”
"
#包括
"
)
endif()

您是否使用头文件上的
配置_文件
来扩展cmake变量?您是否在cmake端执行了任何操作?C++编译器和CGEAR不会神奇地通信。我不知道你是从哪里得到这个想法的。