2014-01-23 28 views
0

CMake在路徑中引入/ __ /。什麼原因?使用CMake爲什麼一些目標/路徑包含/ __ /?

這裏從編譯METIS它使用CMake的一個例子:

[ 3%] Building C object libmetis/CMakeFiles/metis.dir/__/GKlib/b64.c.o 
cd /workstuff/dune/zusatz/metis-5.0.2/build/Linux-x86_64/libmetis && /usr/bin/gcc 
-DLINUX -D_FILE_OFFSET_BITS=64 -std=c99 -fno-strict-aliasing -fPIC -Wall 
-pedantic -Wno-unused-variable -Wno-unknown-pragmas -DNDEBUG -DNDEBUG2 
-DHAVE_EXECINFO_H -DHAVE_GETLINE -O3 -I/workstuff/dune/zusatz/metis-5.0.2/GKlib 
-I/workstuff/dune/zusatz/metis-5.0.2/include -I/workstuff/dune/zusatz/metis-5.0.2/libmetis/. 
-o CMakeFiles/metis.dir/__/GKlib/b64.c.o -c /workstuff/dune/zusatz/metis-5.0.2/GKlib/b64.c 
+1

這不是CMake的事情。我們需要看看你的'CMakelists.txt'來告訴造成這種情況的原因。 – ComicSansMS

+0

@ComicSansMS我不認爲這是我的項目,因爲這將是一個奇怪的事件,METIS也有同樣的行爲。我會盡力找到一個最簡單的設置來展示我的意思。 – usr1234567

回答

2

我們將文件添加到庫中/未位於「當前源代碼目錄」的子目錄的可執行文件時,必須遵守這個行爲因此使用「/../」。

在這裏,當我們得到這樣的一個例子:

FILE(GLOB inFiles 
    "${CMAKE_CURRENT_SOURCE_DIR}/../BuildEnvCommon/*.c" 
    "${CMAKE_CURRENT_SOURCE_DIR}/../BuildEnvCommon/*.cpp" 
    "${CMAKE_CURRENT_SOURCE_DIR}/../BuildEnvCommon/*.hpp" 
    "${CMAKE_CURRENT_SOURCE_DIR}/../BuildEnvCommon/*.h" 
) 

(SNIP)

add_executable("ProjectName" ${inFiles}) 

在你的榜樣,我可以想像,GKlib不地處libmetis源代碼樹,但該編譯後的源代碼b64.c被手動添加到庫/可執行文件中,並作爲其一部分進行編譯,而不是鏈接到(單獨)編譯的GKlib。我希望這很清楚我的意思。

+0

我很高興聽到這種帶有樹外路徑的提示能夠真正解決您的問題。你能在這裏更新嗎? –