2014-01-23 57 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

我很高兴听到这种带有树外路径的提示能够真正解决您的问题。你能在这里更新吗? –