使用CMake为什么某些目标/路径包含/ __ /?

时间:2014-01-23 10:49:02

标签: cmake path

CMake在路径中引入/ __ /。是什么原因?

这里是一个使用CMake编译METIS的例子:

[  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 个答案:

答案 0 :(得分: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"
)

(剪断)

add_executable("ProjectName" ${inFiles})

在您的示例中,我可以想象GKlib不是位于libmetis源代码树中,而是将编译后的源代码b64.c手动添加到库/可执行文件中并作为其一部分进行编译而不是链接到(另外)编译GKlib。我希望它清楚我的意思。