我有两个静态库:libfoo和libbar,每个都在自己的目录中.
libfoo包含一个includes/包含单个文件的目录A.h.它还包含一个包含的sources/目录B.gen.自定义规则应创建新标头B.h和新源文件B.c.
libbar包含一个includes/包含单个文件的目录C.h.它还包含一个包含的sources/目录C.c.该文件包含A.h和B.h来自libfoo.
问题是:根据这些规则,我如何编写两个库的CMakeFiles.txt(根据我的理解,棘手的部分是将所有libfoo头文件放在同一目录中,但也许我误导了)?
文件层次:
/
libfoo/
includes/
A.h
sources/
A.c
B.gen
CMakeLists.txt
libbar/
includes/
C.h
sources/
C.c
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
您不应将任何生成的文件复制到源目录。源目录和构建目录之间的分离是有意的,称为源外构建,以免在构建过程中使用生成的文件污染源目录。
在这种情况下你需要做的是:
定义一个自定义命令,使用 add_custom_command 将 B.gen 转换为 Bh 文件。这将在 CMAKE_CURRENT_BINARY_DIR 中生成 Bh,它反映了 CMakeLists.txt 相对于项目根 CMakeLists.txt 所在的源目录。它看起来像这样:
add_custom_command(输出 Bh 命令 my-gen B.gen Bh 取决于 B.gen)
使用 include_directories 函数将生成文件的文件夹添加到包含目录中。如果所有这些都是在单个 CMakeLists.txt 中完成的,您可以使用 include_directories(${CMAKE_CURRENT_BINARY_DIR})
一旦 CMake 依赖解析器想要构建 Cc,它就会分析其内容并找出构建它所需的 Bh。通过 add_custom_command,您已经告诉它如何创建该标头,它将调用您的生成器。
您应该看看 CMake 中的源代码构建如何工作,以正确理解文件夹层次结构。
| 归档时间: |
|
| 查看次数: |
3040 次 |
| 最近记录: |