Ищите команду cmake clean для очистки вывода CMake - PullRequest
344 голосов
/ 13 марта 2012

Так же, как make clean удаляет все файлы, созданные make-файлом, я хотел бы сделать то же самое с CMake.Слишком часто я обнаруживаю, что вручную просматриваю каталоги, удаляя файлы, такие как cmake_install.cmake и CMakeCache.txt, и папки CMakeFiles.

Существует ли команда, подобная cmake clean, для автоматического удаления всех этих файлов?В идеале это должно соответствовать рекурсивной структуре, определенной в файле CMakeLists.txt текущего каталога.

Ответы [ 19 ]

2 голосов
/ 13 августа 2018

Конечно, сборки из исходного кода - это метод перехода к файлам сборки Unix, но если вы используете другой генератор, такой как Eclipse CDT, он предпочитает собирать в исходном коде.В этом случае вам нужно будет удалить файлы CMake вручную.Попробуйте это:

find . -name 'CMakeCache.txt' -o -name '*.cmake' -o -name 'Makefile' -o -name 'CMakeFiles' -exec rm -rf {} +

Или, если вы включили globstar с shopt -s globstar, попробуйте этот менее отвратительный подход:

rm -rf **/CMakeCache.txt **/*.cmake **/Makefile **/CMakeFiles
0 голосов
/ 06 августа 2018

Если у вас есть пользовательские определения и вы хотите сохранить их перед очисткой, запустите следующее в вашей директории сборки:

sed -ne '/variable specified on the command line/{n;s/.*/-D \0 \\/;p}' CMakeCache.txt

Затем создайте новый каталог сборки (или удалите старый каталог сборки и создайте его заново) и, наконец, запустите cmake с аргументами, которые вы получите с помощью приведенного выше сценария.

0 голосов
/ 19 января 2018

Чтобы упростить очистку при использовании сборки «вне источника» (т.е. вы строите в каталоге build), я использую следующий скрипт:

$ cat ~/bin/cmake-clean-build
#!/bin/bash

if [ -d ../build ]; then
    cd ..
    rm -rf build
    mkdir build
    cd build
else
    echo "build directory DOES NOT exist"
fi

Каждый раз, когда вам нужно очистить, выдолжен получить этот скрипт из каталога build:

. cmake-clean-build
0 голосов
/ 13 января 2017

У меня есть это в моем файле оболочки (.bashrc, .zshrc):

t-cmake-clean() {
    local BUILD=$(basename $(pwd))
    cd ..
    rm -rf $BUILD
    mkdir $BUILD && cd $BUILD
}

Вы должны использовать его только для сборок вне исходного кода. Допустим, у вас есть каталог с именем build/ для этой цели. Тогда вам просто нужно запустить t-cmake-clean изнутри.

0 голосов
/ 12 июля 2016

Я использую следующий скрипт для таких целей:

#!/bin/bash

for fld in $(find -name "CMakeLists.txt" -printf '%h ')
do
    for cmakefile in CMakeCache.txt cmake_install.cmake CTestTestfile.cmake CMakeFiles Makefile
    do
        rm -rfv $fld/$cmakefile
    done
done

Если вы используете Windows, используйте Cygwin для этого скрипта.

0 голосов
/ 06 июля 2013

Я успешно использовал ответ zsxwing , чтобы решить следующую проблему:

У меня есть источник, который я собираю на нескольких хостах (на плате Raspberry Pi Linux, на виртуальной машине VMware Linux и т. Д.)

У меня есть скрипт Bash, который создает временные каталоги на основе имени хоста компьютера, например:

# Get hostname to use as part of directory names
HOST_NAME=`uname -n`

# Create a temporary directory for cmake files so they don't
# end up all mixed up with the source.

TMP_DIR="cmake.tmp.$HOSTNAME"

if [ ! -e $TMP_DIR ] ; then
  echo "Creating directory for cmake tmp files : $TMP_DIR"
  mkdir $TMP_DIR
else
  echo "Reusing cmake tmp dir : $TMP_DIR"
fi

# Create makefiles with CMake
#
# Note: switch to the temporary dir and build parent 
#       which is a way of making cmake tmp files stay
#       out of the way.
#
# Note 2: to clean up cmake files, it is OK to
#        "rm -rf" the temporary directories

echo
echo Creating Makefiles with cmake ...

cd $TMP_DIR

cmake ..

# Run makefile (in temporary directory)

echo
echo Starting build ...

make
0 голосов
/ 20 декабря 2012

Если вы запустите

cmake .

, он восстановит файлы CMake.Это необходимо, если вы добавляете новый файл в исходную папку, выбранную, например, * .cc.

Хотя это не «чистый» как таковой, он «очищает» CMakeфайлы путем восстановления кешей.

0 голосов
/ 21 июня 2019

попробуйте использовать: cmake --clean-first path-of-CMakeLists.txt-файл -B output-dir

- clean-first: сначала создайте цель clean, а затем build.
(Только для очистки используйте --target clean.)

0 голосов
/ 20 февраля 2015

Создайте временный каталог сборки, например, build_cmake. Следовательно, все ваши файлы сборки будут в этой папке.

Затем в свой основной файл CMake добавьте следующую команду.

add_custom_target(clean-all
    rm -rf *
)

Следовательно при компиляции сделайте

cmake ..

И для очистки сделать:

make clean-all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...