【问题标题】:C++ how can i use the same .h and choose different .cpp when using the same .h?C++如何使用相同的.h并在使用相同的.h时选择不同的.cpp?
【发布时间】: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


【解决方案1】:

您不一定需要为此使用宏。您可以在案例 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

在这种方法中,总是简单地编译两个源代码。

【讨论】:

  • 我应该使用不同的 CMakelists 来做到这一点吗?还是只有一个?
  • @Tumb1eweed 只有一个。我添加了一个 CMake 示例。
猜你喜欢
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 2011-02-04
  • 2019-07-22
  • 2023-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多