Используя 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 ответ

Мы наблюдаем такое поведение при добавлении файлов в библиотеку / исполняемый файл, которые не находятся в подкаталоге "current source dir", таким образом используя "/../".

Вот пример того, когда мы получаем это:

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. Надеюсь, понятно, о чем я.

Другие вопросы по тегам