CMake,复制源文件扩展宏和构建

时间:2014-11-28 09:48:53

标签: c++ cmake build-process

我需要做以下事。

源代码位于

src\MY_SOURCE_PATH\SourceFiles

我需要扩展宏,特别是因为我使用宏来生成一些源代码(在示例中用于序列化枚举的保护,同样的事情由我使用的一些库(Offirmo,SparkParticleEngine)完成但我不想要宏污染我的用户命名空间,也不用手写很多代码。

所以我需要预处理一些宏(不是全部,例如我不想扩展像“assert”或包含守卫这样的东西)并创建我的源目录的克隆。

src_expanded\MY_SOURCE_PATH\SourceFilesWithLessMacros

然后我会在新目录上运行“build”,最后我想在Include目录上移动与特定REGEX(前缀为“libraryPrefix”的头文件)相匹配的标题

include\MY_SOURCE_PATH\HeadersMarkedAsPublicIncludes

这样用户就无法包含实现标头

1 个答案:

答案 0 :(得分:2)

只扩展一些宏听起来相当复杂。如果您只满足于"我想生成文件的某些部分"以与预处理器宏不同的方式,您可以使用CMake的命令configure_file

该命令的作用是解析文件并在文件中替换CMake变量。以下是configured.cpp文件的外观示例:

#include <cassert>

void ${SET_BY_CMAKE}(int x) {
  assert(x == 42);
}

CMakeLists.txt中,您需要执行以下操作:

set(SET_BY_CMAKE foo)
configure_file(configured.cpp configured.cpp)
add_executable(MyExe ${CMAKE_CURRENT_BINARY_DIR}/configured.cpp other.cpp files.cpp)

configure_file的调用将在二进制目录中创建一个configured.cpp文件,如下所示:

#include <cassert>

void foo(int x) {
  assert(x == 42);
}