CMake 출력을 지우는 'cmake clean'명령 찾기


419

것처럼 make clean삭제 메이크가 생산하고있는 모든 파일, 내가 CMake와 같은 일을하고 싶습니다. 모든 너무 자주 나 자신이 수동으로 같은 파일을 제거 디렉토리를 통과 발견 cmake_install.cmake하고 CMakeCache.txt, 그리고 CMakeFiles폴더.

cmake clean이러한 모든 파일을 자동으로 제거하는 것과 같은 명령 이 있습니까? 이상적으로는 현재 디렉토리 CMakeLists.txt파일에 정의 된 재귀 구조를 따라야 합니다.

답변:


487

없습니다 cmake clean.

나는 보통 "build"와 같은 단일 폴더에 프로젝트를 빌드합니다. 내가 원한다면 make clean그냥 할 수 있습니다 rm -rf build.

루트 "CMakeLists.txt"와 동일한 디렉토리에있는 "build"폴더가 일반적으로 적합합니다. 프로젝트를 빌드하려면 cmake에 CMakeLists.txt의 위치를 ​​인수로 지정하면됩니다. 예를 들면 다음과 같습니다 cd <location-of-cmakelists>/build && cmake .... (@ComicSansMS에서)


101
이것을 "소스 외부 빌드"라고하며 선호하는 방법이어야합니다. 이름 충돌 등을 피합니다
arne

17
소스 외부 빌드의 경우 +1 이것은 여러 아키텍처를 구축 할 때 필수적입니다. 예를 들어, 소스 내 빌드를 사용하여 64 비트 및 32 비트 바이너리를 모두 빌드 할 수 없습니다. 두 개의 별도 CMake 캐시 계층이 필요하기 때문입니다.
ComicSansMS

9
원하는 위치에 폴더를 배치 할 수 있지만 루트 CMakeLists.txt와 동일한 디렉토리에 빌드 폴더를 사용하는 것이 좋습니다. 빌드하려면 단순히 cmake에게 CMakeLists.txt의 위치를 ​​인수로 제공하십시오. 예를 들면 :cd <location-of-cmakelists>/build && cmake ..
ComicSansMS

64
정말 깨끗한 cmake가 있어야합니다. cmake를 사용한 모든 사람은 소스 빌드를 끝내는 습관이 있더라도 실수로 잘못된 디렉토리에서 cmake를 실행했으며 수동으로 정리하는 것은 엉덩이에 큰 고통입니다.
pavon

24
@DevSolar 그러나 그 반대는 사실이 아니다. 파일이 버전 제어를 받고 있지 않다고해서 cmake가 생성 한 파일이라는 의미는 아닙니다. 유지 관리해야하는 버전이없는 파일과 cmake cruft를 선택하는 것은 특히 많은 cmake 파일이 파일에 복사 / 유사한 이름을 지정할 때 어려움이 있습니다.
pavon

84

CMake 공식 FAQ 상태 :

GNU autotools로 작성된 일부 빌드 트리에는 빌드를 정리하고 생성 된 빌드 시스템의 Makefile 및 기타 부분을 제거하는 "make distclean"대상이 있습니다. CMakeLists.txt 파일은 스크립트와 임의의 명령을 실행할 수 있으므로 CMake는 "make distclean"대상을 생성하지 않습니다. CMake는 CMake 실행의 일부로 생성 된 파일을 정확하게 추적 할 방법이 없습니다. 불분명 한 대상을 제공하면 사용자가 예상대로 작동한다는 잘못된 인상을 줄 수 있습니다. CMake는 "make clean"대상을 생성하여 컴파일러와 링커에서 생성 된 파일을 제거합니다.

"make distclean"대상은 사용자가 소스 내 빌드를 수행하는 경우에만 필요합니다. CMake는 소스 내부 빌드를 지원하지만 사용자가 소스 외부 빌드 개념을 채택하도록 적극 권장합니다. 소스 트리와 별 개인 빌드 트리를 사용하면 CMake가 소스 트리에서 파일을 생성하지 못하게됩니다. CMake는 소스 트리를 변경하지 않으므로 명확한 대상이 필요하지 않습니다. 빌드 트리를 삭제하거나 별도의 빌드 트리를 생성하여 새로운 빌드를 시작할 수 있습니다.


원래 GNU autotools에 의해 도입되고 사용 된 'distclean'대상은 소스 트리를 tar 준비하고 tar 배포를 만들 수 있도록하기위한 것입니다. 이러한 tar 파일 사용자는 autotools (aclocal, automake, autoconf 등) 필요로 하지 않고 다운로드 및 압축을 풀고 'configure'및 'make'를 실행할 수 있습니다. cmake를 설치하지 않고 빌드 할 수있는 소스. 그러나 cmake로 구성하는 동안 cmake를 사용한 구성이 발생하기 때문에 생성기가 단일 대상 생성기 인 경우 ( 'make'대상이므로) 작동하지 않습니다.
Carlo Wood

... cmake를 실행 중입니다. 구성 할 수없고 플랫폼 테스트 등을 수행하지 않는 배포를하는 것은 쓸모가 없습니다. 따라서 cmake에 대한 '깨끗한'대상이 없습니다. cmake가되어 필요한 최종 사용자의 컴퓨터에 존재하는.
Carlo Wood

63

오늘날 Git의 어느 곳에서나 CMake 및 use를 잊어 버릴 수 있으며 git clean -d -f -x소스 제어하에 있지 않은 모든 파일을 제거합니다.


14
-x그래도 그 옵션. 그것은 git무역 의 훌륭한 속임수입니다 . 개인적으로 여전히 드라 이런을 먼저 하겠지만 git clean -d -f -x -n. 매번 나는 프로젝트 폴더를 git제어 하는 프로젝트에 사용하는 편의 파일을 보관 하지만 다른 사람들과 공유하고 싶지 않으므로 git add프로젝트에 보관 하지 않습니다 . -e <pattern>옵션을 신중하게 추가하지 않으면 이런 종류의 파일이 사라질 것입니다. 그 메모 git.gitcleanignore파일 이 있으면 좋을 것 입니다. :)
CivFan

1
@CivFan 사용을 시도 할 수 있습니다 chattr +i $filename(루트 권한이 필요하며, 이후에는 파일을 수정할 수 없습니다). 이런 식으로 git은 파일을 좋아하지 않아도 해당 파일을 제거 할 수 없습니다 rm -f.
Ruslan

3
즉, 자체 빌드를 피해야하는 소스 내 빌드를 가정합니다.
Slava

이것은 간단한 해결책이었습니다 (그리고 그 플래그의 의미를 기억하지 못하지만 개발 기계 롤 일뿐입니다).
matanster

1
음 .. 사용자가 잊어 버린 새로 추가 된 파일은 git add어떻습니까?
yugr

50

나는 30 분 동안 그것을 봤다. 내가 유일하게 유용한 것은 find유틸리티 를 호출하는 것이었다 .

# Find and then delete all files under current directory (.) that:
#  1. contains "cmake" (case-&insensitive) in its path (wholename)
#  2. name is not CMakeLists.txt
find . -iwholename '*cmake*' -not -name CMakeLists.txt -delete

또한 그 전에 호출하십시오 make clean(또는 사용중인 CMake 생성기) .

:)


36
작업중 인 디렉토리가 버전 제어를 받고 있다면이 접근법을 사용하지 않는 것이 좋습니다. svn 으로이 접근법을 시도했을 때 저장소 작업 파일 중 일부가 제거되었습니다.
bcumming 2013

8
cmake와 일치하는 다른 파일이있을 수 있으므로 이것이 보편적 인 접근 방식이 아닙니다. rm -rf CMakeFiles; rm -rf CMakeCache.txt; rm -rf cmake_install.cmake;
honza_p

1
-exec rm -rf {} \ +를 제거하고 -delete를 사용합니다.
Edgar Aroutiounian

3
이 명령은 잠재적으로 일부 사용자 파일을 삭제할 수 있기 때문에 하향 조정되었습니다. 나는 더 길고 간단하고 덜 위험하지 않은 honza_p 명령을 선호합니다.
Adrien Descamps

1
@AdrienDescamps : 하위 디렉토리에 여전히 cmake 관련 정크가 남아 있다는 점을 제외하고. 나는하고 rm -rf CMakeFiles ; rm -rf */CMakeFiles ; rm -rf */*/CMakeFiles ; rm -rf */*/*/CMakeFiles있었고 아직 끝나지 않았다.
SF.

35

다음과 같은 것을 사용할 수 있습니다.

add_custom_target(clean-cmake-files
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)

// clean-all.cmake
set(cmake_generated ${CMAKE_BINARY_DIR}/CMakeCache.txt
                    ${CMAKE_BINARY_DIR}/cmake_install.cmake
                    ${CMAKE_BINARY_DIR}/Makefile
                    ${CMAKE_BINARY_DIR}/CMakeFiles
)

foreach(file ${cmake_generated})

  if (EXISTS ${file})
     file(REMOVE_RECURSE ${file})
  endif()

endforeach(file)

나는 보통 "make clean-all"명령을 만들어 이전 예제에 "make clean"을 호출합니다.

add_custom_target(clean-all
   COMMAND ${CMAKE_BUILD_TOOL} clean
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)

"깨끗한"대상을 종속 항목으로 추가하지 마십시오.

add_custom_target(clean-all
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
   DEPENDS clean
)

"깨끗한"은 CMake에서 실제 대상이 아니므로 작동하지 않습니다.

또한이 "clean-cmake-files"를 다른 것으로 의존해서는 안됩니다.

add_custom_target(clean-all
   COMMAND ${CMAKE_BUILD_TOOL} clean
   DEPENDS clean-cmake-files
)

그렇게하면 정리가 완료되기 전에 모든 CMake 파일이 지워지고 "CMakeFiles / clean-all.dir / build.make"를 검색하면 오류가 발생합니다. 결과적으로 어떤 컨텍스트에서든 "anything"전에 clean-all 명령을 사용할 수 없습니다.

add_custom_target(clean-all
   COMMAND ${CMAKE_BUILD_TOOL} clean
   COMMAND ${CMAKE_COMMAND} -P clean-all.cmake
)

그것은 작동하지 않습니다.


cmake_generated를 자동으로 채우는 방법이 있습니까? 아마도 이것을 yuri.makarevich의 답변과 결합 하시겠습니까? 현재 이것은 $ {CMAKE_BINARY_DIR}의 서브 디렉토리에있는 파일을 제거하지 않습니다.
foxcub

Ninja 또는 Visual Studio에서는 작동하지 않습니다. 나는 그런 접근법을 권장하지 않을 것입니다.
usr1234567

23

단순히 발행 rm CMakeCache.txt하는 것도 저에게 효과적입니다.


1
CMakeCache.txt에서 관련 변수를 삭제하는 것만으로도 효과가 있습니다.
Yorkwar

CMakeCache.txt를 삭제 한 다음 'cmake --build / build-path'를 실행하면 '오류 : 캐시를로드 할 수 없습니다'가 발생합니다.
nenchev

1
@nenchev cmake /build-path다시 실행해야 합니다.
Samaursa

@Samaursa cmake --build는 필요할 때 cmake를 재실행합니다.이 메소드는 빌드 디렉토리를 끊고 cmake가 불평합니다. 내 대답은 CMakeFiles / 디렉토리를 삭제하라는 메시지를 표시하여 깨끗하게 다시 빌드하고 cmake가 자동으로 다시 실행되도록합니다.
nenchev

2
@nenchev 나는 당신이 의미하는 것을보고 동의합니다.
Samaursa

9

어쩌면 조금 구식 일지 모르지만 이것은 Google이 처음 방문했을 때부터 발생합니다. cmake clean 을 추가 할 것입니다.

빌드 디렉토리에서 지정된 대상으로 빌드를 시작할 수 있기 때문에

cmake --build . --target xyz

당신은 물론 실행할 수 있습니다

cmake --build . --target clean

clean생성 된 빌드 파일에서 대상 을 실행 합니다.


8

소스 외부 빌드가 최선의 답변이라는 데 동의합니다. 그러나 소스 빌드를해야 할 때 여기 에 사용할 수있는 Python 스크립트를 작성했습니다 .

  1. "깨끗하게"실행
  2. CMakeCache.txt와 같은 최상위 디렉토리에서 특정 CMake 생성 파일을 제거합니다.
  3. CMakeFiles 디렉토리를 포함하는 각 서브 디렉토리에 대해 CMakeFiles, Makefile, cmake_install.cmake를 제거합니다.
  4. 빈 하위 디렉토리를 모두 제거합니다.

고마워 사전 정리로 인해 존재 make하지 않을 때 침묵하는 스크립트에 줄을 추가하고 싶습니다 Makefile(즉,이 스크립트를 dem 등원으로 만듭니다). if os.path.isfile(os.path.join(directory,'Makefile')):24 행 바로 앞에 라인을 추가하십시오 (물론 적절하게 간격을 두십시오) : args = [물론 라인이 추가 된 후 나머지 함수 본문을 들여 쓰기하십시오. 이것은 현재 정리중인 디렉토리에가 있는 make ... clean경우 에만 수행됩니다 Makefile. 그렇지 않으면 스크립트가 완벽합니다!
Michael Goldshteyn

4

내가 최근에 찾은 해결책은 소스 외부 빌드 개념을 Makefile 래퍼와 결합하는 것입니다.

최상위 CMakeLists.txt 파일에서 소스 내 빌드를 방지하기 위해 다음을 포함합니다.

if ( ${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} )
    message( FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt." )
endif()

그런 다음 최상위 Makefile을 만들고 다음을 포함합니다.

# -----------------------------------------------------------------------------
# CMake project wrapper Makefile ----------------------------------------------
# -----------------------------------------------------------------------------

SHELL := /bin/bash
RM    := rm -rf
MKDIR := mkdir -p

all: ./build/Makefile
    @ $(MAKE) -C build

./build/Makefile:
    @  ($(MKDIR) build > /dev/null)
    @  (cd build > /dev/null 2>&1 && cmake ..)

distclean:
    @  ($(MKDIR) build > /dev/null)
    @  (cd build > /dev/null 2>&1 && cmake .. > /dev/null 2>&1)
    @- $(MAKE) --silent -C build clean || true
    @- $(RM) ./build/Makefile
    @- $(RM) ./build/src
    @- $(RM) ./build/test
    @- $(RM) ./build/CMake*
    @- $(RM) ./build/cmake.*
    @- $(RM) ./build/*.cmake
    @- $(RM) ./build/*.txt

ifeq ($(findstring distclean,$(MAKECMDGOALS)),)
    $(MAKECMDGOALS): ./build/Makefile
    @ $(MAKE) -C build $(MAKECMDGOALS)
endif

기본 대상 all은을 입력하여 make호출하고 대상을 호출합니다../build/Makefile .

대상 ./build/Makefile이 하는 첫 번째 일은의 변수 build인를 사용 하여 디렉토리 를 만드는 것 $(MKDIR)입니다 mkdir -p. 디렉토리 build는 소스 외부 빌드를 수행 할 위치입니다. 우리는 주장 -p을 제공하여mkdir 는 이미 존재하는 디렉토리를 만들려고 비명을 지르지 않는다는 합니다.

두 번째 목표 ./build/Makefile는 디렉토리를 디렉토리로 변경 build하고 호출하는 것입니다.cmake 입니다.

all대상으로 돌아가서를 호출합니다 $(MAKE) -C build. 여기서 $(MAKE)Makefile 변수가 자동으로 생성됩니다 make. make -C작업을 수행하기 전에 디렉토리를 변경합니다. 따라서 사용하는 $(MAKE) -C build것은cd build; make .

와이 메이크 래퍼를 호출 요약하자면, make all또는 make일을하는 것과 같습니다

mkdir build
cd build
cmake ..
make 

대상 distclean은을 호출 cmake ..한 다음 make -C build clean마지막으로 build디렉토리 에서 모든 내용을 제거합니다 . 나는 이것이 당신이 당신의 질문에 정확하게 요구 한 것이라고 믿습니다.

Makefile의 마지막 부분은 사용자 제공 대상이 아닌지 평가합니다 distclean. 그렇지 않은 경우 디렉토리를 build호출 하기 전에로 변경 합니다. 예를 들어 사용자가 타이핑 할 수 make clean있고 Makefile 이이 를cd build; make clean .

결론적으로,이 Makefile 랩퍼는 필수 소스 외부 빌드 CMake 구성과 결합하여 사용자가 명령과 상호 작용할 필요가 없도록 만듭니다 cmake. 이 솔루션은 또한 build디렉토리 에서 모든 CMake 출력 파일을 제거하는 훌륭한 방법을 제공합니다 .

PS Makefile에서는 접두사 @를 사용하여 쉘 명령의 출력을 억제 하고 접두사 를 사용하여 쉘 명령의 @-오류를 무시합니다. 대상의 rm일부로 사용할 때 distclean파일이 존재하지 않으면 명령이 오류를 반환합니다 (이 파일은 명령 줄을 사용하여 이미 삭제 rm -rf build되었거나 처음에는 생성되지 않았 음). 이 반환 오류는 Makefile을 강제 종료합니다. @-이를 방지하기 위해 접두사 를 사용합니다. 파일이 이미 제거 된 경우 허용됩니다. 우리는 Makefile이 계속 진행되고 나머지는 제거하기를 원합니다.

주의해야 할 또 다른 사항 :이 Makefile은 가변 개수의 CMake 변수를 사용하여 프로젝트를 빌드하는 경우 작동하지 않을 수 있습니다 (예 :) cmake .. -DSOMEBUILDSUSETHIS:STRING="foo" -DSOMEOTHERBUILDSUSETHISTOO:STRING="bar". 이 Makefile에서는 사용자가 입력 cmake ..하거나 cmakeMakefile에 포함 할 수있는 일관된 수의 인수 를 제공 하여 CMake를 일관된 방식으로 호출한다고 가정합니다 .

마지막으로 신용이 필요한 신용입니다. 이 Makefile 랩퍼는 C ++ 애플리케이션 프로젝트 템플리트가 제공 한 Makefile에서 수정되었습니다 .


4

물론, Out-of-source 빌드는 Unix Makefile을위한 방법이지만 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

어제 나의 선택은 repo를 새 폴더로 복제하는 것 build입니다. 하위 폴더에서 빌드하도록 CMakeLists.txt를 업데이트하십시오 . 명령보다 시간이 조금 더 걸렸지 만 한 번만 수행해야했습니다. :)
Tien Do

4

cmake --clean-first-CMakeLists.txt-file -B output-dir 경로를 사용하십시오.

--clean-first : 먼저 대상 클린을 빌드 한 다음 빌드하십시오.
청소 만하려면 --target clean을 사용하십시오.


해당 스크린 샷에는 텍스트 만 표시 됩니다. 그러나 스크린 샷을 찍어 스크린 리더가있는 사람에게는 답을 얻지 못합니다. 해당 사진을 삭제하고 텍스트를 복사 / 붙여 넣기 한 다음 1 분 동안 입력 내용을 올바르게 형식화하십시오.
GhostCat

3

통과 한 경우 -D빌드 파일을 생성 할 때 CMake에 매개 변수를 하고 전체 빌드 / 디렉토리를 삭제하지 않으려는 경우 :

빌드 디렉토리에서 CMakeFiles / 디렉토리를 삭제하십시오.

rm -rf CMakeFiles/
cmake --build .

이로 인해 CMake가 다시 실행되고 빌드 시스템 파일이 재생성됩니다. 빌드도 처음부터 시작됩니다.


1

"소스 외부"빌드 (즉, 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

좋고 안전합니다. 파일 관리자에서 빌드 디렉토리를 열었을 때 cd .. ; rm ; mkdir ; cd시퀀스를로 바꾸는 것이 좋습니다 cd .. ; rm -rf build/*.
Mostafa Farzán

0

사용자 정의를 정의하고 정리하기 전에 저장하려면 빌드 디렉토리에서 다음을 실행하십시오.

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

그런 다음 새 빌드 디렉토리를 작성하거나 (또는 ​​이전 빌드 디렉토리를 제거한 후 다시 작성) 마지막으로 cmake위 스크립트에서 얻을 수있는 인수로 실행 하십시오.


0

당신이 실행하는 경우

cmake .

CMake 파일을 재생성합니다. 예를 들어 * .cc로 선택한 소스 폴더에 새 파일을 추가하는 경우 필요합니다.

이것은 "깨끗한"자체는 아니지만 캐시를 재생성하여 CMake 파일을 "정리"합니다.


wrt를 청소하지 않습니다. 컴파일 상태 : 1200 개의 파일 중 500 개가 컴파일 된 경우 "cmake"이후 마지막 700 개 파일 만 계속됩니다.
피터 Mortensen

0

그런 목적으로 다음 쉘 스크립트를 사용합니다.

#!/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

이 질문이 많은 관심과 복잡한 해결책을 얻는다는 것이 재미 있습니다. 실제로 cmake를 사용하여 깔끔한 방법을 사용하지 않는 것이 고통 스럽습니다.

글쎄, 당신은 분명히 cd buildrm -rf *을하고 청소해야 할 때 할 수 있습니다. 그러나 rm -rf *많은 사람들이 자신이 어느 디렉토리에 있는지 알지 못하는 경우가 많은 위험한 명령입니다.

당신이 경우 cd .., rm -rf build다음 mkdir build과 다음 cd build, 그건 그냥 너무 많이 입력합니다.

따라서 좋은 해결책은 빌드 폴더에서 벗어나 cmake에게 경로 :
to configure : cmake -B build
to build : cmake --build build
to clean :rm -rf build
재 작성 빌드 폴더로 : 당신도 필요하지 않습니다 mkdir build, 단지 그것을 구성 cmake -B build하고 cmake가 생성됩니다


0

cmake주로 요리 Makefile, 하나 rm깨끗한 PHONY에 추가 할 수 있습니다 .

예를 들어

[root@localhost hello]# ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  hello  Makefile  test
[root@localhost hello]# vi Makefile
clean:
        $(MAKE) -f CMakeFiles/Makefile2 clean
        rm   -rf   *.o   *~   .depend   .*.cmd   *.mod    *.ko   *.mod.c   .tmp_versions *.symvers *.d *.markers *.order   CMakeFiles  cmake_install.cmake  CMakeCache.txt  Makefile

-1

내 쉘 rc 파일 ( .bashrc, .zshrc)에 이것을 가지고 있습니다 :

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

소스 외부 빌드 에만 사용해야 합니다. build/이 목적으로 이름 이 지정된 디렉토리가 있다고 가정 해 봅시다 . 그런 다음 그 t-cmake-clean안에서 실행 하면됩니다.


-3

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

-8

예를 들어 임시 빌드 디렉토리를 만듭니다. build_cmake . 따라서 모든 빌드 파일이이 폴더 안에 있습니다.

그런 다음 기본 CMake 파일에서 아래 명령을 추가하십시오.

add_custom_target(clean-all
    rm -rf *
)

따라서 컴파일하는 동안

cmake ..

그리고 청소하기 :

make clean-all

11
누군가가 소스가 아닌 소스를 실수로 빌드 할 경우 모든 프로젝트를 제거하는 좋은 방법

3
예. 이 방법은 "out of source build"
Natesh

6
끔찍한 추천. 답변으로 존재하지 않아야합니다.
Anne van Rossum

@AnnevanRossum 동의
zevarito
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.