묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결삼각형의 실전! CMake 초급
CMake Error: Unknown argument --fresh
--fresh는 3.24에서 추가되었군요.sudo apt install cmake 했는데 3.22로 설치되기 때문에 강의 내용처럼 홈페이지에서 직접 다운받아야 했군요.공유를 위해 적어봅니다!
-
해결됨삼각형의 실전! CMake 초급
질문
여러 줄 주석에서 === 개수는 어떤 식으로 활용되나요?add_compile_options는 전역라고 하셨는데 target_compile_options PUBLIC과 동작이 같나요?타겟마다 다른 컴파일 옵션을 가질 수 있기 때문에 ABI에 영향을 주지 않는 것만 사용해야 합니다.ABI가 특정 옵션에 영향 받았는지는 어떻게 알 수 있을까요? PUBLIC이면 영향을 주는 옵션을 사용해도 안전한가요? 안전하다면 그래도 지양해야 하나요?
-
해결됨삼각형의 실전! CMake 초급
set(<variable> ON/OFF)와 option에 차이가 있을까요?
아니면 같은 동작을 하나요?
-
해결됨삼각형의 실전! CMake 초급
-와 _를 선택하는 규칙이 궁금합니다.
project(hello-cmake) add_executable(hello_cmake src/main.cpp)에서요 project와 add_executable에서 각각 다른 기호를 선택한 이유가 궁금합니다.
-
해결됨삼각형의 실전! CMake 초급
4강과 5강의 강의 순서가 바뀐 것 같습니다.
[04. CMake CLI 사용법]에서 갑자기 hello-cmake가 나타나서 실습을 못 따라가 당황했는데요. [05. Hello CMake]와 순서가 바뀐 것 같습니다.
-
해결됨삼각형의 실전! CMake 초급
install 추가 질문
안녕하세요?install 예제 코드를 약간 수정해서 응용해보고 싶습니다. 근데 이 내용을 챗봇들도 잘 몰라서 강사님께 문의드립니다. baz 타겟을 새로 만들고, foo는 baz타겟을 private으로 의존합니다. baz 타겟은 baz()를 제공하며 foo()와 동일하게 stdout 출력하는 코드입니다. #include <baz.h> foo() { cout << "I'm foo!" << endl; baz(); // "I'm baz!" } baz는 foo 내부에서만 사용됩니다. 그래서 demo에는 기존 코드처럼 foo 타겟의 헤더만 제공합니다. 제 의도는 I'm foo에 이어 I'm baz도 같이 출력됐으면 했는데, 항상 I'm baz만 출력됩니다. add_library(foo foo.cpp # baz.cpp )챗봇은 foo 타겟 만들 때 baz.cpp도 추가하라고 합니다. foo, baz 를 명시적으로 분리된 상태에서 CMakeLists.txt에서 작성하고, baz는 foo 내부에서만 사용되니 foo 타겟만 demo 노출해서 사용할 수 있는 방법이 있을까요?
-
해결됨삼각형의 실전! CMake 초급
-G 명령으로 Xcode 생성 할때 오류가 발생합니다.
제가 맥에 대해서 거의 문외한 이어서. 발생 한 문제 원인을 잘 찾지 못하겠네요.hello-cmake 폴더에서 cmake -G "Xcode" -B build-xcode . 명령을 수행 하니 아래와 같은 오류가 발생 했습니다.-- The C compiler identification is unknown-- The CXX compiler identification is unknownCMake Error at CMakeLists.txt:5 (project): No CMAKE_C_COMPILER could be found.CMake Error at CMakeLists.txt:5 (project): No CMAKE_CXX_COMPILER could be found. "Unix makefiles" 는 정상적으로 만들어 졌습니다.Xcode 를 한번도 실행 한적이 없어서 발생 한 문제 인가 해서 최신 버전으로 업데이트 하고. hello world 프로젝트 만들어서 빌드 까지 해보았습니다. 이것과는 관련 없는것 같고요.hello-cmake 폴더는 깃허브에서 다운 받은 것 입니다.
-
해결됨삼각형의 실전! CMake 초급
Build_SHARED_LIBS 질문
안녕하세요. 강사님BUILD_SHARED_LIBS를 지정해줄 때 False는 정적, True는 동적으로 빌드된다는 것이 바로 앞의 커맨드 강의에서 add_library( foo STATIC src/foo.cpp ) 정적add_library( foo SHARED src/foo.cpp ) 동적과 같은 형태의 기능을 하는것인가요?그리고 라이브러리 타겟을 정의할 때, 빌드 결과물을 지정해 줬다면 BUILD_SHARED_LIBS가 적용되지 않는 다는 말씀이 어떤 뜻인지 잘 이해가 안갑니다
-
해결됨삼각형의 실전! CMake 초급
수업 진행 중에 궁금한 부분이 생겼습니다.
수업진행중 cmake에 관해 궁금한 부분이 생겼는데요. CMakeLists.txt에서 Debug인지 Release인지 작성해준 것이 없는 것 같은데 어떻게 Build/Debug 밑에 실행파일이 생성되게 되나요? 그리고 32bit 프로그램인지 64bit 프로그램인지 작성하는 부분도 없는데 어떤 기준으로 만들어지게 되는건가요? vscode cmake 익스텐션을 사용하고 있는데 익스텐션에서 설정이 되어있는걸까요?
-
해결됨삼각형의 실전! CMake 초급
설치경로 지정이 잘 안돼요.
--install-prefix 를 특정 폴더를 지정하였는데도 실제 --target install 을 해보면, 자꾸 program files (x86) 에 가서 설치가 되는데 이건 왜그러는걸까요..? -- Install configuration: "Debug" -- Installing: C:/Program Files (x86)/installing/lib/foo.lib -- Installing: C:/Program Files (x86)/installing/include/foo.h -- Installing: C:/Program Files (x86)/installing/lib/cmake/installing/installing-config.cmake -- Installing: C:/Program Files (x86)/installing/lib/cmake/installing/installing-config-debug.cmake
-
해결됨삼각형의 실전! CMake 초급
FetchContent로 가져온 외부 라이브러리를 사전에 빌드하는 방법이 있을까요?
안녕하세요 삼각형님! CMake를 활용해 OpenGL 환경을 구성하고 있고, FetchContent를 사용하여 외부 라이브러리를 의존하려고 하는 중입니다.여기서 문제는 glad 라이브러리는 CMake Configure-Generate 단계만으로는 라이브러리가 빌드되지 않아 사용할 수 없었습니다.. 여기서 CMake 프로젝트 절차가 매끄럽지 못한 점은 프로젝트 개발을 위해 어쩔수 없이 --build 를 수행 한 뒤에 개발이 가능하다는 점이 걸리게 되었습니다. Configure, Generate 단계에, 본 프로젝트 add_executable 한 target을 제외하고 의존하는 라이브러리를 사전에 빌드할 수 있을까요?CMakeLists.txt 첨부 드립니다!https://github.com/DogGuyMan/OpenGL-With-CMake/blob/main/CMakeLists.txthttps://github.com/DogGuyMan/OpenGL-With-CMake/blob/main/cmake/Dependency.cmake
-
해결됨삼각형의 실전! CMake 초급
ExternalProject_Add 관련 질문
안녕하세요? 이번 강의에 외부 라이브러리를 사용하기 위해 1. vcpkg+find_package를 이용해 vcpkg로 설치한 라이브러리를 사용한다2. fetchContent 를 이용해 vcpkg-find_package 없이 직접 package를 다운 받아서 사용한다. 를 배웠습니다. CMakeLists.txt에서 target_link_libraries를 이용하면 간단하게 라이브러리를 이용할 수 있구요. github에서 외부 라이브러리 사용법 안내(readme)를 읽다보면 종종 ExternalProject_Add와 add_dependencies, target_include_directories, target_link_directories, target_link_library 등도 사용하는 게 보입니다. 이 기술들은 사장된 기술들인가요? 강의 예제에서는 target_include_directories, target_link_directories, add_dependencies 를 사용하지 않는 이유가 궁금합니다. compile 후 linking을 위해서 이 명령어를 이용해 경로도 설정해줘야할 것 같은데요, 강의대로 따라하면 include directory, link directory를 굳이 설정할 필요 없이 link library로만으로도 빌드가 잘 되네요(?)
-
해결됨삼각형의 실전! CMake 초급
FetchContent를 캐시 처리할 수 있나요?
안녕하세요! CMake에 대해 궁금한 부분이 많았는데, 훌륭한 강의로 많은 도움을 받았습니다.관련하여 한가지 궁금한 부분이 있어서 질문을 드립니다.현재 개발 환경에서 컨테이너 기반으로 CMake 빌드 자동화를 구현해 보려 합니다.그런데, FetchContent 에서 외부 소스를 다운로드 받고 컴파일하는 부분이 매번 동일하게 수행됩니다.이 부분을 캐시 처리하고 싶은데요, CMake 설정은 어떻게 가능한지 궁금합니다.
-
해결됨삼각형의 실전! CMake 초급
CMake 커맨드 - target_include_directories 질문
강의 15:17 부근 target_include_directories 커맨드 설며에서, 'foo 타겟에 의존성을 가지고 있는 다른 타겟들은 bar 타겟의 인클루드 디렉토리에 있는 헤더 파일들을 사용할 수 있다' 라고 말씀해주셨습니다. 여기서 foo 가 아니라 bar 타겟 아닌가요?커맨드에도 foo 타겟 이름을 보이지 않는데 어째서 foo 타겟에 의존성을 가지고 있는 다른 타겟들이 나온건지 질문드립니다.
-
해결됨삼각형의 실전! CMake 초급
병렬 동작 지원 여부
CMake 에서 병렬 동작을 지원하나요?빌드나 테스트 등을 병렬로 처리할 수 있을 것 같아서요.
-
해결됨삼각형의 실전! CMake 초급
CMake 의 단점들
모던 CMake 로 넘어오면서 장점들을 소개해주셧는데, 단점들은 무엇이 있나요?
-
해결됨삼각형의 실전! CMake 초급
CMake 출시 연도가 영상에서 아마도 잘못 소개된 것 같습니다
안녕하세요.좋은 강의를 만들어주셔서 감사합니다! <CMake 소개> 영상 내용 중 CMake 출시 연도와 관련하여 잘못된 정보가 있는 것 같아 글을 남깁니다.<CMake 소개> 영상의 0:25 부근입니다.아래 슬라이드와 함께 나오는 부분입니다.위 슬라이드에는 "2013년 10월 처음 공개(v2.8.12)"라고 나오고,영상 0:25 부분에서는 삼각형님이 "CMake는 2013년에 처음 출시가 되었습니다"라고 설명하시는 음성이 나옵니다. 위 내용대로 2013년에 CMake가 처음 출시 되었다면 올해가 2024년이니 11년 정도의 역사를 가진 프로그램이라는 의미입니다. 슬라이드 상의 "20+년차 프로그램"이라는 내용과 맞지 않습니다. 인터넷 검색을 해보니 CMake가 처음 공개된 연도는 2000년으로 나옵니다.https://en.wikipedia.org/wiki/CMakehttps://cmake.org/history/ 아마 영상을 찍는 과정에서 무언가 착오가 있었던 것 같습니다. (위 슬라이드에서 v2.8.12를 언급한 것은 Modern이 아닌 CMake의 마지막 버전을 말씀하시고 싶었던 것이 아닌가 추측합니다. 이 추측이 맞을까요? v2.8.12를 위 슬라이드에서 언급하신 본래 이유는 무엇일까요?) 이 부분을 한번 검토해주시고 정확한 내용을 영상에 반영해주실 수 있을까 해서 글을 남깁니다.감사합니다!
-
해결됨삼각형의 실전! CMake 초급
4-2 installing 에서 질문드립니다
1.이번 강의에서는 --target install로 커맨드를 설정하셨는데요,cmd cmake --build . --target installCMakeLists.txt에 install 이라는 타겟이 없습니다. GNUInstallDirs 모듈 내부에 install이라는 타겟이 존재하는 건가요?2.installing을 사용하는 목적이 이해가 잘 안되서 질문드립니다. 예를 들어서..'cmake -B build .' -> 'cmake --build build'커맨드를 차례대로 실행하면, build 폴더 안에 여러가지 빌드와 관련된 파일들이 중구난방으로 쌓이게 되는 것 같은데요. installing을 이용해서 빌드 산출물들을 원하는 폴더 구조로 잘 정리하고 싶다는 목적으로 사용하나요?3.그러면 제가 배포한 소스코드들을 다른 누군가 사용할 때, 그 누군가는 CMakeLists.txt를 열어서 GNUInstallDirs 모듈을 사용한 흔적을 발견하는 경우, cmake --build build --target install 커맨드를 실행해야 하는 건가요?
-
해결됨삼각형의 실전! CMake 초급
CheckIncludeFileCXX 모듈 질문
안녕하세요? 강의 3-4 Fetch Content 부분에서 질문드립니다.check_include_file_cxx 모듈은 find_package() 커맨드와 동일한 역할을 하나요?# 필요한 패키지 찾기 find_package(fmt CONFIG REQUIRED)# C++ 파일이 있는지 검사 check_include_file_cxx("filesystem" CXX_FILESYSTEM_HAVE_HEADER) # 파일이 없는 경우 메세지 출력 if(NOT CXX_FILESYSTEM_HAVE_HEADER) message(STATUS "Oh no! can't use filesystem!") endif()
-
해결됨삼각형의 실전! CMake 초급
혹시 강의에 나오는 예제 코드를 받을 수 있는건가요?
섹션 2의 모던 CMake 쪽 강의를 듣고 있습니다.제가 놓친거 같은데 강의에서 실행하는 예제 코드 들은 어디서 다운 받을 수 있는건가요?아니면 제가 비슷하게 만들고 테스트를 해야 되는건가요?