42에서 C언어로 이루어진 과제를 진행할 때는, gcc 컴파일러와 -Wall -Werror -Wextra 플래그를 사용하는 것이 필수적입니다.
저는 CLion에서 디버깅 할 때 별다른 플래그를 사용하지 않다가, 과제 제출 전에 터미널에서 컴파일을 해보는 식으로 요구사항을 충족시켰었는데요,
CMake를 통해 빌드를 할 때에도 컴파일러와 플래그를 지정하는 방법에 대해서 알아보려고 합니다.
그리고 파일을 open이나 fopen함수 등을 통해 열 때, 경로 지정에 신경써줘야 하는 부분이 있어 그 부분도 적어보았습니다.
1.
Compiler & Compiler flags
새 프로젝트를 만들었을 때의 기본 화면입니다.
화면엔 나오지 않은 최상단 툴바에서 (맥 기준 CLion→Preferences) Preferences 항목을 찾아 들어가면
Build, Execution, Deployment → CMake를 찾아 이동하시면 이런 화면이 나옵니다.
여기서 기본 설정된 Debug라는 프로필을 직접 수정하셔도 좋고,
이렇게 새로 하나 만들어서 쓰셔도 됩니다.
중요한 건 중단부분에 CMake options인데요,
여기에 -DCMAKE_C_COMPILER=gcc 이렇게 적으면 gcc로 컴파일하게 됩니다.
저는 아직 gcc만 써봐서 다른 무얼 쓰게될지는 모르지만, 언젠간 유용하겠지 싶어서 적어봅니다.
CLion은 기본적으론 clang 컴파일러를 사용하는 것으로 알고 있습니다.
뒤이어 -DCMAKE_C_FLAGS=” ”에서 따옴표 사이에 사용할 플래그를 적으면 컴파일시 해당 플래그들을 적용하게 됩니다.
이렇게 만들어진 프로필들은 해당 프로젝트에서만 사용되기 때문에, 프로젝트마다 설정을 해주시면 됩니다.
그런데 때로는 플래그를 빌드할 때마다 변경해가며 사용해야할 때가 있는데요, 예를들면 get_next_line 과제에서 -D BUFFER_SIZE=XX 라는 플래그를 컴파일시마다 다르게 주어가며 테스트를 해보는 상황입니다.
매번 Preferences에 들어가서 수정하는 것은 귀찮다 보니 다른 방법을 쓰면 좋은데요,
이런 경우에는 CMakeLists.txt를 수정해서 플래그를 지정할 수 있습니다.
set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} 사용할 플래그)
를 추가해주시면 됩니다. ${CMAKE_C_FLAGS} 부분은 기존에 preferences에서 정의되어있는 부분을 가져오는 환경변수이기 때문에, 설정해놓으신 게 없다면 생략되어도 좋은 부분입니다.
2.
파일 오픈 시 상대경로
open이나 fopen 등의 함수를 통해 파일을 열 때, 프로젝트 폴더 내에 해당 함수가 쓰인 .c파일과 같은 디렉토리에 열어야 할 파일이 있다면 open(”filename”, FLAG)와 같은 형식으로 파일을 열 수 있습니다.
그런데 CLion에서 프로젝트를 진행하다보면 위와 같은 방법으로 파일을 열었을 때 fd가 -1이 나오며 파일 열기에 실패하는 것을 볼 수 있는데요, CLion에서는 파일을 여는 위치가 다르기 때문입니다.
현재 사용하고 있는 프로필에 해당하는 폴더, 기본적으로는 cmake-build-debug 폴더가 기본경로이기 때문에,
이런식으로 cmake-build-debug(혹은 쓰일 프로필 이름) 파일 내부에 파일을 위치시키면 파일이 정상적으로 열립니다.
하지만 경우에 따라 여러 프로필을 사용할 때에 모든 프로필 폴더 내부에 파일을 위치시키기 귀찮으니,
상대경로로 ../을 사용하시면 편하게 쓸 수 있습니다.
이상 제가 CLion으로 IDE를 처음 써보며 과제를 진행하고 디버깅할 때 잘 안되던 것들에 대해 알아본 내용입니다. 아시는 분들도 많겠지만 저처럼 잘 모르시던 분들도 계실 거라 생각하기에 열심히 정리해 올려보았습니다.