Trouble/C, C++,CMake

C++ 코드 build 시, C++ 버전으로 인한 실패 해결법

침닦는수건 2023. 3. 23. 20:19
반응형

C++ 코드를 build하는 과정에서 CMake, make를 한 번만 쳐서 성공하는 경우는 거의 없다. 환경 설정이 간단하지 않기 때문에 오류명을 보면서 시도의 시도를 거듭해서 build하는 경우가 더 많다. 
 
나 역시도 그런다. 특히 C++을 안 쓴지 오래 돼서 사실 상 초급자가 되어버렸기 때문에 실수 때문이든 몰라서든 자주 구르면서 build를 가까스로 해낸다. 
 
내가 겪은 오류 중 가장 간단해보이지만 원인을 찾아내기까지 가장 오래 걸렸던 C++ 버전 관련 오류의 해결법을 기록해두고자 한다.
 

오류 양상

  • std와 같은 C++ 대표 namespace에 함수나 변수가 없다는 오류들.
  • thirdparty 설치를 빼먹지 않았음에도 발생하는 not found, missing 오류들.

예를 들어, std::integer_sequence 같은 것들이 없다는 오류가 발생할 경우, C++ 버전으로 인한 오류다. 나 같은 경우는 ceres를 빌드할 때나 opencv를 빌드할 때 자주 목격했다. 
 

오류 해결 방법

1. cmake 커맨드 입력 시, -D CMAKE_CXX_STANDARD=14  (17, 20 등 다양하게 있다.)
 
보통 C++14 버전 이상을 요구하는 코드들이 많은데 기본 설정이 C++11로 되어있는 경우가 많다. 기본적으로 14로 바꾸어 보고 최신 코드라면 17, 20까지도 변경하면서 시도해본다.
 
2. CMakeLists.txt 내 초반부에 set(CMAKE_CXX_STANDARD 14)와 set(CMAKE_CXX_FLAGS "-std=c++14")를 추가한다.
 
위 1.의 안내 사항과 동일한 내용인데 CMakeLists.txt 내에 박아넣는 형태다. 잘 짜여진 CMakeLists.txt의 경우, 내부에서 C++ 버전을 바꾸는 라인이 있을 수 있는데 만약 있다면 그 라인 다음에 set()를 넣어주면 된다.  
 
3. cmake 버전 바꾸기 (일반적으로 downgrade)
 
원인은 나도 잘 모르겠는데 cmake 버전에 따라 위 1~2가 안되는 경우가 있다. sudo apt-get install cmake를 이용하여 설치할 경우, 항상 최신 버전 cmake가 설치되는데 이보다 낮은 버전으로 낮추면 될 때가 있다. 
 
참고로, cmake를 귀찮더라도 직접 버전 정해서 깔아쓰는게 안전하고 좋은 것 같다. 

반응형