2014-07-06 55 views
1

因此,我正在從make轉換到cmake,並且由於源內目錄構建而陷入了一個微不足道的地步。cmake:在子目錄A中生成標題A在子目錄B中由目標傳遞需要B

以下情形:

指南A /生成一些頭,A.H。 爲了其它CPP /小時,非生成的文件以找到生成的報頭,我已經添加了${CMAKE_CURRENT_BINARY_DIR}作爲包括(< --assumption 1這裏是最好的方法),在目錄乙然而現在

/(A /的兄弟目錄)有一個特定的源文件,它通過一個file.h(也在A /中)需要生成的Ah文件。

我現在面臨的問題是,file.h有參考啊是#include "A.h"但在cmake的執行只包含了這一點目錄是:現在 B/

  1. ..什麼是在目錄B中包含Ah的最佳方式是,我應該如何硬編碼:${CMAKE_BINARY_DIR}/path/to/include/for/A/A.h雖然感覺不好

  2. 另一種方法是將Ah文件生成到源目錄,但我經常看到建議不生成任何東西源目錄。

+0

生成'Ah'成'$ {} CMAKE_CURRENT_BINARY_DIR /一些-tag'這個目錄添加到C++包括使用命令:'include_directories($ {} CMAKE_CURRENT_BINARY_DIR/some-現在你可以使用'#include「啊」'' –

+1

好吧,但這大致就是我現在所擁有的,這允許A /中的文件找到Ah,但是當在B中構建目標時/他們然後找不到Ah,因爲CMAKE_CURRENT_BINARY_DIR然後是B /。 – hbogert

+2

使用[PROJECT_BINARY_DIR](http://www.cmake.org/cmake/help/v3.0/variable/PROJECT_BINARY_DIR.html) –

回答

0

您可以使用PROJECT_BINARY_DIR變量設置來自不同目錄的生成文件的位置。請注意,每次使用project命令時,PROJECT_BINARY_DIR都會更改。在這種情況下,你可以使用<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 
相關問題