😺

CPP Moduleで自動でビルドとメモリリークのチェックをする

2024/12/12に公開

記事にするほどの内容でもないけど

動機

MacでC++の課題を進めていると、校舎のPCでコンパイルエラーになったりするので、コンパイルとメモリリークのチェックをするようにgithub actionsを設定しました。

僕は毎回このリポジトリをコピーして使っています。
https://github.com/ssmyg/cpp_template/

github actionsの設定

動作タイミングをmainにpushした時にしているので、ビルドがエラーになったからと言って、push自体は成功してしまいます。エラーになったまま提出してしまわないように注意して下さい。

name: Build test

on:
  push:
    branches:
      - main

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y make build-essential valgrind

      - name: Build
        run: make

ルートのMakefile

もはやNormは関係ないのでワイルドカードを使用しています。

UNAME := $(shell uname)
ifeq ($(UNAME), Linux) # Linux
LEAK_CHECK := valgrind --leak-check=full --error-exitcode=1
endif
ifeq ($(UNAME), Darwin) # Mac OS
LEAK_CHECK := leaks -atExit --
endif

.PHONY: all
all:
	@for dir in $(wildcard ex*); do \
		make re -C $$dir; \
		$(LEAK_CHECK) ./$$dir/a.out; \
		if [ $$? -ne 0 ]; then \
			echo "Memory leak detected in $$dir"; \
			exit 1; \
		fi; \
	done

Discussion