cmake:在子目录B中生成的标头,在子目录B中由目标传递

时间:2014-07-06 13:34:22

标签: cmake

所以我正在从make转换到cmake,因为in-source-dir构建,我陷入了一个微不足道的问题。

以下情形:

目录A /生成一些标题, A.h 。 为了让其他cpp / h,非生成文件找到生成的标题,我添加了${CMAKE_CURRENT_BINARY_DIR}作为include(< - 假设1这里是最好的方法)

但是现在在目录B /(A /的一个兄弟目录)中有一个特定的源文件传递给 file.h ,它也在A /中,需要生成的文件。

我现在遇到的问题是file.h引用了A.h作为#include "A.h"但是在cmake执行的这一点上,唯一包含的目录是: B /

  1. 现在..在目录B中包含A.h的最佳方法是什么?我应该硬编码:${CMAKE_BINARY_DIR}/path/to/include/for/A/A.h感觉不好的东西

  2. 另一种方法是将A.h文件生成到源目录,但我经常建议不要在源目录中生成任何内容。

1 个答案:

答案 0 :(得分:0)

您可以使用PROJECT_BINARY_DIR变量设置来自不同目录的生成文件的位置。请注意,每次使用PROJECT_BINARY_DIR命令时,project都会更改。在这种情况下,您可以使用<PROJECT>_BINARY_DIR变量:

# CMakeLists.txt
project(Foo)
add_subdirectory(Boo)

# Boo/CMakeLists.txt
project(Boo)
message("Boo_BINARY_DIR: ${Boo_BINARY_DIR}") # == PROJECT_BINARY_DIR
message("Foo_BINARY_DIR: ${Foo_BINARY_DIR}") # != PROJECT_BINARY_DIR