Skip to content

Instantly share code, notes, and snippets.

@devlights
Last active April 29, 2025 14:15
Show Gist options
  • Select an option

  • Save devlights/5fbf3e6724dac167d97e4e22c1fd84e9 to your computer and use it in GitHub Desktop.

Select an option

Save devlights/5fbf3e6724dac167d97e4e22c1fd84e9 to your computer and use it in GitHub Desktop.
C言語向けのTaskfile.yml
version: '3'
silent: true
vars:
CC: gcc
CFLAGS: -Wall -Wextra -O0 -g3
SRC_DIR: ./src
BUILD_DIR: ./build
BIN_DIR: ./bin
EXECUTABLE: "{{.BIN_DIR}}/app"
tasks:
default:
desc: "タスク一覧を表示"
cmds:
- task --list
init:
desc: "プロジェクトの初期化(必要なディレクトリを作成)"
cmds:
- mkdir -p "{{.SRC_DIR}}" "{{.BUILD_DIR}}" "{{.BIN_DIR}}"
status:
- test -d "{{.SRC_DIR}}"
- test -d "{{.BUILD_DIR}}"
- test -d "{{.BIN_DIR}}"
clean:
desc: "ビルドファイルとバイナリを削除"
cmds:
- rm -rf {{.BUILD_DIR}}/* {{.BIN_DIR}}/*
fmt:
desc: "clang-formatを実行"
vars:
SRC_FILES:
sh: find {{.SRC_DIR}} -type f -name "*.c"
cmds:
- for: { var: SRC_FILES, as: FILE }
cmd: clang-format -i {{.FILE}}
tags:
desc: "ctags -Rを実行"
cmds:
- ctags -R .
compile:
desc: "単一のCファイルをコンパイルする"
requires:
vars: [FILE]
cmds:
- mkdir -p "{{.BUILD_DIR}}"
- '{{.CC}} {{.CFLAGS}} -c "{{.FILE}}" -o "{{.BUILD_DIR}}/{{base .FILE}}.o"'
sources:
- "{{.FILE}}"
generates:
- "{{.BUILD_DIR}}/{{base .FILE}}.o"
compile-all:
desc: "すべてのソースファイルをコンパイル"
deps: [init]
vars:
SRC_FILES:
sh: find {{.SRC_DIR}} -type f -name "*.c"
cmds:
- for: { var: SRC_FILES, as: FILE }
cmd: |
echo "Compiling {{.FILE}}"
{{.CC}} {{.CFLAGS}} -c "{{.FILE}}" -o "{{.BUILD_DIR}}/$(basename {{.FILE}} .c).o"
sources:
- "{{.SRC_DIR}}/*.c"
generates:
- "{{.BUILD_DIR}}/*.o"
link:
desc: "オブジェクトファイルをリンクして実行ファイルを生成"
deps: [compile-all]
cmds:
- mkdir -p "{{.BIN_DIR}}"
- '{{.CC}} {{.CFLAGS}} {{.BUILD_DIR}}/*.o -o "{{.EXECUTABLE}}"'
sources:
- "{{.BUILD_DIR}}/*.o"
generates:
- "{{.EXECUTABLE}}"
build:
desc: "プロジェクトをビルド"
deps: [link]
run:
desc: "ビルドしたプログラムを実行"
deps: [build]
cmds:
- "{{.EXECUTABLE}}"
dev:
desc: "単一のCファイルをコンパイルして実行(例: task dev FILE=src/main.c)"
requires:
vars: [FILE]
silent: false
cmds:
- mkdir -p "{{.BIN_DIR}}"
- '{{.CC}} {{.CFLAGS}} "{{.FILE}}" -o "{{.BIN_DIR}}/{{base .FILE}}"'
- "{{.BIN_DIR}}/{{base .FILE}}"
sources:
- "{{.FILE}}"
generates:
- "{{.BIN_DIR}}/{{base .FILE}}"
@devlights
Copy link
Author

devlights commented Apr 29, 2025

Run

$ task
task: Available tasks for this project:
* build:             プロジェクトをビルド
* clean:             ビルドファイルとバイナリを削除
* compile:           単一のCファイルをコンパイルする
* compile-all:       すべてのソースファイルをコンパイル
* default:           タスク一覧を表示
* dev:               単一のCファイルをコンパイルして実行(例: task dev FILE=src/main.c)
* fmt:               clang-formatを実行
* init:              プロジェクトの初期化(必要なディレクトリを作成)
* link:              オブジェクトファイルをリンクして実行ファイルを生成
* run:               ビルドしたプログラムを実行
* tags:              ctags -Rを実行

REFERENCES

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment