C 환경 세팅과 여러가지…
세팅 작업
4주차에 C언어 세팅을 하면서
여러가지 고생을 하였지만
다행히 친절하신 동료분이 세팅을 도와주셔서 여러가지 인식할 수 있었다
현재 인식한 것은
- wsl2 - ubuntu
- makefile
- task.json, launch.json
적어도 다음에 비슷한 세팅을 할 때가 있었을 때,
뻘쭘하면서 같은 도움을 받고 싶지는 않기에
TIL을 추가로 남기려 한다
- code . 을 쓰면 해당 폴더 기준으로 vs code가 열린다
WSL2
첫번째 C 세팅중 삽질을 한 부분은
윈도우 10 이상의 환경에서 mingw gcc 를 통해
컴파일을 시도하려 하였다
(물론 이 녀석은 잘못이 없을 수 있다)
정확히는 ‘makefile’이 정상적으로 동작하지 않을 수도 있다
라는 점으로
이후, WSL 2 를 이용하여 ubuntu를 설치하는 방식으로 선회하였다
참고로 windows 10 home 인 경우 hyper-v 가 활성화 되지 않아있기에
(bios 에서 세팅할 수 없음)
별도의 bat 파일을 제작하여, VM 환경을 만들었다
[참고] : https://lastcard.tistory.com/141
이후 WSL2 설치는 MS의 사이트를 이용하였고,
[참고] : https://learn.microsoft.com/ko-kr/windows/wsl/install
ubuntu의 경우, ms appstore 에서 설치해도 되고,
install 해줘도 된다
[참고] : https://gaesae.com/161
이렇게 만들어진 가상 환경 linux(ubuntu)는
파일 탐색기에서도 확인이 가능하다
(여기에 직접 드래그해서 무언가를 넣으려고 하면 안되지만,
반대로 가져오는 건 된다고)
makeFile
빌드 프로세스 자동화를 위한 텍스트 파일이며,
일련의 규칙을 통하여 소스 코드 파일, 의존성, 빌드 규칙을 정의하여
빌드를 지시하는 용도라 한다
(c/c++ 및 컴파일 가능한 언어에서 사용)
빌드 목표, 의존성, 빌드 규칙 이 가장 큰 특징이다
간략한 문법 설명
- PHONY : 실제 파일을 생성하지 않고 ‘명령’ 실행, 실제 파일과 충돌하지 않음
(‘가상 목표’라고도 표현, ‘항상 실행’하며 .PHONY 방식으로 사용) - help : 도움말 출력 (make help 혹은 make 명령 사용시 실행)
-
CFLAGS : makeFile에서의 환경 변수이며, 컴파일시 C 컴파일러에게 전달
-I : 지정한 디렉토리에서 헤더 파일을 찾음
-Wall : 모든 경고 메시지 활성화
-g : 디버그 정보 포함하여 컴파일
-D : 전처리기 매크로 정의 -
test, build_test, test-rbtree 등은 ‘실제 목표’이다
- $(MAKE) : makefile 에서 사용되는 변수로, make 도구 자체를 나타낸다
-> 이를 이용하여 make를 재귀적으로 쓰거나 다른 makefile을 포함한다
-C를 사용하여 다른 디렉토리를 가리킬 수 있음
.PHONY: help build test build_test
help:
# http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
@grep -E '^[a-zA-Z0-9_%/-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
build:
build: ## Build executables
$(MAKE) -C src
build_test:
build_test:
$(MAKE) -C test build_test
test:
test: ## Test rbtree implementation
$(MAKE) -C test test
clean:
clean: ## Clear build environment
$(MAKE) -C src clean
$(MAKE) -C test clean
.PHONY: test clean build_test
CFLAGS=-I ../src -Wall -g #-DSENTINEL
test: test-rbtree
./test-rbtree
valgrind ./test-rbtree
build_test: test-rbtree
test-rbtree: test-rbtree.o ../src/rbtree.o
../src/rbtree.o:
$(MAKE) -C ../src rbtree.o
clean:
rm -f test-rbtree *.o
vs code의 json
보통 ‘작업 환경’을 설정하는데 사용한다
여러 json이 있지만,
이번에 유용하게 사용한 것은, tasks와 launch 이므로 그 둘을 중점적으로
다루고, 나머지는 언급만 하려 한다
-
- tasks.json
- 작업(task)을 정의하고 구성하는데 사용
빌드, 테스트, 실행, 사용자 지정 작업 을 설정하고 실행
각 요소에 대한 간략한 설명이다
- version: tasks.json 파일의 형식 버전을 나타냄
- tasks: 작업 목록을 정의, 각 작업은 별도의 JSON 객체로 표시
- label: 작업에 부여한 고유한 이름 또는 레이블
이를 통해 해당 작업을 호출하고 실행할 때 참조 가능 - type: 작업 유형을 지정
일반적으로 “shell”을 사용하여 셸 명령을 실행하거나, 다른 유형(예: “process”)을 사용 - command: 실행할 명령 또는 스크립트의 경로를 지정
- args: 명령에 전달할 인수 목록을 정의
필요한 경우 여러 개의 인수를 포함할 수 있습니다. - options (선택적): 작업 실행을 위한 옵션을 지정
cwd를 사용하여 작업을 실행할 작업 디렉토리를 설정 가능 - problemMatcher (선택적): 작업이 생성하는 출력에서 문제를 식별하고
해당 정보를 문제 패널에 표시하는 방법을 지정하는데 사용
이 부분은 특히 빌드 작업과 관련
{ "version": "2.0.0", "tasks": [ { "label": "task_label", "type": "shell", "command": "command_to_execute", "args": ["argument1", "argument2", ...], "options": { "cwd": "working_directory" }, "problemMatcher": [] }, // 추가 작업 정의 ] }
- tasks.json
-
- launch.json
- vs code에서 디버깅 환경을 구성하고
디버깅 세션을 시작하는데 사용하는 파일
- version: launch.json 파일의 형식 버전을 나타냄
-
configurations: 디버그 설정 목록을 정의
각 설정은 별도의 JSON 객체로 표시 -
name: 디버그 설정에 부여한 고유한 이름 또는 레이블
-
type: 디버거의 유형을 지정
예를 들어, “cppdbg”는 C/C++ 디버거를 나타냄 -
request: 디버깅 요청 유형을 지정
“launch”는 프로그램을 시작하고 디버그 세션을 시작하는 것을 의미 -
program: 디버깅할 프로그램 또는 스크립트의 경로를 지정
-
args: 프로그램에 전달할 명령행 인수의 목록을 정의
-
stopAtEntry: 프로그램 시작 시 진입점에서 중지할지 여부를 지정
-
cwd: 디버그 중인 프로그램의 작업 디렉토리를 설정
-
environment: 프로그램이 실행될 환경 변수를 설정
-
externalConsole: 디버그 콘솔을 외부 콘솔로 사용할지 여부를 지정
-
MIMode: 디버거의 유형과 모드를 지정
예를 들어, “gdb” 또는 “lldb”와 같은 디버거를 선택 가능 -
setupCommands: 디버깅 세션 시작 전에 실행할 디버거 명령 목록을 정의
- preLaunchTask (선택적): 디버그 세션 시작 전에 실행할 tasks.json 파일 내에서 정의된 작업(Task)을 지정
이를 사용하여 빌드 작업을 디버깅 전에 실행하거나, 디버깅 전에 특정 작업을 수행이 가능
{ "version": "0.2.0", "configurations": [ { "name": "ConfigurationName", "type": "DebugType", "request": "launch", "program": "path/to/program", "args": ["arg1", "arg2", ...], "stopAtEntry": false, "cwd": "working_directory", "environment": [], "externalConsole": false, "MIMode": "debugger_type", "setupCommands": [], "preLaunchTask": "task_name" }, // 추가 디버그 설정 정의 ] }
이 밖에도, settings.json, extensions.json 등등 다양한 json이 존재한다
- launch.json
댓글남기기