我需要做以下事。
源代码位于
src\MY_SOURCE_PATH\SourceFiles
我需要扩展宏,特别是因为我使用宏来生成一些源代码(在示例中用于序列化枚举的保护,同样的事情由我使用的一些库(Offirmo,SparkParticleEngine)完成但我不想要宏污染我的用户命名空间,也不用手写很多代码。
所以我需要预处理一些宏(不是全部,例如我不想扩展像“assert”或包含守卫这样的东西)并创建我的源目录的克隆。
src_expanded\MY_SOURCE_PATH\SourceFilesWithLessMacros
然后我会在新目录上运行“build”,最后我想在Include目录上移动与特定REGEX(前缀为“libraryPrefix”的头文件)相匹配的标题
include\MY_SOURCE_PATH\HeadersMarkedAsPublicIncludes
这样用户就无法包含实现标头
答案 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);
}