【发布时间】:2020-12-16 23:21:19
【问题描述】:
这是场景: “baselogger.h”包含API,我在两种情况下实现这些API(案例A和案例B,A对应1.cpp,B对应2.cpp),然后如何编写宏以使用不同的cpp编译不同的案例在“baselogger.h”中实现 API?
【问题讨论】:
-
你不能干净地使用宏。您需要在链接步骤中选择 A 或 B 的编译单元和生成的目标代码。
标签: c++ cmake compilation
这是场景: “baselogger.h”包含API,我在两种情况下实现这些API(案例A和案例B,A对应1.cpp,B对应2.cpp),然后如何编写宏以使用不同的cpp编译不同的案例在“baselogger.h”中实现 API?
【问题讨论】:
标签: c++ cmake compilation
您不一定需要为此使用宏。您可以在案例 A 中编译和链接 1.cpp,在案例 B 中编译和链接 2.cpp。
CMake 示例:
option (CASE_A "Descriptive description" ON)
if (CASE_A)
target_sources(target_name PRIVATE 1.cpp)
else ()
target_sources(target_name PRIVATE 2.cpp)
endif ()
Insted of option,你可以有一些其他的条件。这对于将 API 移植到不同的系统通常很有用。
但是基于宏的解决方案也可以:
// 1.cpp
#ifdef MACRO_CASE_A
// case A implementation for baselogger.h
#endif
// 2.cpp
#ifndef MACRO_CASE_A
// case B implementation for baselogger.h
#endif
在这种方法中,总是简单地编译两个源代码。
【讨论】: