所以我正在从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 /
现在..在目录B中包含A.h的最佳方法是什么?我应该硬编码:${CMAKE_BINARY_DIR}/path/to/include/for/A/A.h
感觉不好的东西
另一种方法是将A.h文件生成到源目录,但我经常建议不要在源目录中生成任何内容。
答案 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