首页 > 解决方案 > CMake/make 在头文件上应用 -D 标志

问题描述

我正在(交叉)编译一个支持许多不同平台的共享 C 库,该库由 CMakeLists 文件的层次结构处理。在这些文件中,有条件地生成了几个特定于平台的编译器标志(带有add_definitions())。我可以成功编译源代码并将其链接到适当的 .so 文件。

但是要在任何项目中使用该库,我也需要提供正确的头文件。CMake的以下install命令选择要复制的正确头文件,但不应用预处理器定义/包含的替换

install(FILES ${headers} DESTINATION include/mylibrary)

那么如何生成/安装“后编译”头文件呢?

到目前为止我的想法:

编辑:正如 Tsyvarev 所指出的,这里有一个非常接近我需要的答案但不幸的是并不完全如此。总之,答案提供了 2 个选项:

还有其他想法吗?

编辑 2:我可能需要详细说明我的声明,即installCMake 的命令不会取代定义。举个例子:

//sampleheader.hpp
#ifndef SAMPLEHEADER_HPP_
#define SAMPLEHEADER_HPP_

#include OS_SPECIFIC_HEADER

//...

现在我有一个 CMakeLists.txt 文件,它执行以下操作:

# ...
if (${OS} MATCHES "arm-emblinux")
    add_definitions(-DOS_SPECIFIC_HEADER="emblinuxHeader.hpp")
elseif (${OS} MATCHES "linux")
    add_definitions(-DOS_SPECIFIC_HEADER="linuxHeader.hpp")
endif()
# ...

一切都编译得很好,但是当install上面的命令被调用时,我的 ../include/ 目录中有一个头文件,其中仍然包含 OS_SPECIFIC_HEADER 占位符。当然,这不能正确地包含在任何开发项目中。

标签: c++makefilecmake

解决方案


推荐阅读