๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ํ๊ฐ์ง ๋ฒ์ ๋ฟ๋ง ์๋๋ผ ๋ค์ํ ๋ฒ์ ์ ์ง์ํด์ค์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ด์ฌ์ ์ฌ์ฉํ๋ค๋ฉด 3.8, 3.9, 3.10 ๋ฒ์ ๋ชจ๋ ์ง์ํด์ฃผ์ด์ผ ํ์ฃ .
๋ฒ์ ๋ฟ๋ง OS ๋ Linux x86, arm, Window, MacOS ๋ฑ ๋ค์ํ๊ฒ ์ง์ํด์ฃผ์ด์ผ ํฉ๋๋ค.
C/C++ ๋ก ๋ง๋ค์ด์ง ํ๋ก์ ํธ๋ฅผ swig ๋ฅผ ํตํด ํ์ด์ฌ, ์๋ฐ, Go ๋ฑ ๋ค์ํ ์ธ์ด๊ณผ ๋ค์ํ ๋ฒ์ ์์ ์ฌ์ฉํ ์ ์๋ ํจํค์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋ ์ ์ด ์์ต๋๋ค.
C/C++ ํ๋ก์ ํธ์ ์ฌ์ฉ๋๋ CMakeLists.txt(cmake) ์ Github Action ์ matrix ๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ ต์ง ์๊ฒ ๋ค์ํ ๋ฒ์ ์ ํจํค์ง๋ฅผ ๋ง๋ค ์ ์์ ๊ฑฐ ๊ฐ์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ ํ์ด์ฌ๊ณผ Linux x86 ๋ง ๋ค๋ฃจ๋ฉฐ, 3.8, 3.9, 3.10 ๋ฒ์ ์ ํ์ด์ฌ์ ์ง์ํ ์ ์๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
(swig ๋ฅผ ์ง์ ์ ์ผ๋ก ์ด์ฉํ๋ ๊ฒ์ ์ค๋ช ํ์ง ์์ผ๋ฉฐ, ํจํค์ง๋ฅผ ์์ฑํ๋ ๊ฒ ๋ํ ๋ณด์ฌ๋๋ฆฌ์ง๋ ์์ต๋๋ค)
๊ทธ๋ผ ๋ ์ธ ๋๋์ฝ๋~
์ฐ์ github action ๋ถํฐ ์ดํด๋ด ์๋ค.
github action ์๋ matrix ๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ฌ ๋ค์ํ ๋ฒ์ ์ด๋ OS ๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ด๋ฐ์์ผ๋ก ์์ฑํ๋ฉด job ์ ์ง๋ ฌ์ด ์๋ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋๋ฉฐ, echo ๊ฐ ๊ฐ๊ฐ ๋ฌ๋๋ง๋ค 1,2,3 ์ฉ ์ฐํ๊ฒ ๋ฉ๋๋ค.
์ด๊ฑธ ํ์ฉํ๋ฉด ๋ค์ํ ๋ฒ์ ์ ํ์ด์ฌ์ ์์ฝ๊ฒ ์ค์นํ ์ ์๊ฒ ๋ค์.
name: Matrix
run-name: Matrix
on:
push:
branches: main
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
count: [1, 2, 3]
steps:
- name: runner test
env:
COUNT: ${{ matrix.count }}
run: |
echo "count: $COUNT"
sleep 10m
์ด๋ ๊ฒํ๋ฉด ์ด 3๊ฐ์ ๋ฌ๋๊ฐ ์คํ๋๋ฉฐ, ๊ฐ๊ฐ ๋ฌ๋๋ ํ์๋ ํ์ด์ฌ ๋ฒ์ ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
name: Matrix
run-name: Matrix
on:
push:
branches: main
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-versions: [ '3.8', '3.9', '3.10' ]
steps:
...
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-versions }}
cache: 'pip'
update-environment: true
์ด๋ ๊ฒ ๋ค์ด๋ฐ์ ํ์ด์ฌ์ /opt/hostedtoolcache/Python/3.9.18/x64 ์ ๊ฐ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
๋ CMakeList.txt (cmake) ์์ ํ์ด์ฌ์ ์ฌ์ฉํ ๋, Python3_ROOT_DIR ํ๊ฒฝ๋ณ์๋ฅผ ๋จผ์ ์ฐพ์๋ณด๊ฒ ๋๋๋ฐ,
๋คํํ actions/setup-python ์์ ๊ธฐ๋ณธ์ ์ธ ํ๊ฒฝ๋ณ์ ๋ค์ ์ ๊ณต์ ํด์ค๋๋ค.
cmake ๋ฅผ ์ฌ์ฉํ ๋ ๋์ ์ผ๋ก ํ์ด์ฌ ๋ฒ์ ์ ๋ฐ์์ผ ํ๋๋ฐ, Python3_ROOT_DIR ์ ์ฌ์ฉํด์ ์์ฝ๊ฒ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ถ๋ถ์ ๋ค์์ ๋ ์์๋ณด๋๋ก ํ์ฃ .
๊ทธ๋ผ ์ด์ CMakeList.txt (cmake) ์์์ ์์ ์ ์์๋ณด์ฃ .
์์์ ํ๊ฒฝ๋ณ์๋ก ๋ฑ๋กํ Python3_ROOT_DIR ์ CMakeList.txt ์์ ์ฌ์ฉํ ์ ์๋๋ก set ์ ์์ฑํฉ๋๋ค.
์ดํ find_package ๋ฅผ ํตํด Python3_ROOT_DIR ๊ฐ ๋ฌธ์ ์๋ค๋ฉด ์์์ ์ฐพ์์ค๋๋ค.
set(Python3_ROOT_DIR ${Python3_ROOT_DIR})
find_package(Python3 COMPONENTS Interpreter Development)
message("Python3_ROOT_DIR: $ENV{Python3_ROOT_DIR}")
message("Python3_INCLUDE_DIRS: ${Python3_INCLUDE_DIRS}")
include_directories( ${Python3_INCLUDE_DIRS} )
Python3_INCLUDE_DIRS ์ ์ด๋์ ์จ ํ๊ฒฝ๋ณ์์ธ์ง ๊ถ๊ธํ์คํ ๋ฐ, find_package ๋ฅผ ํตํด python ์ ์ฐพ๊ฒ ๋๋ค๋ฉด, ์ถ๊ฐ์ ์ผ๋ก ์ ๊ณต๋๋ ํ๊ฒฝ๋ณ์๋ค์ด ์์ต๋๋ค. Python3_INCLUDE_DIRS ๋ํ ๊ทธ์ ํฌํจ๋๋ฉฐ, ํด๋น ๋๋ ํฐ๋ฆฌ์๋ ํค๋ ํ์ผ๋ค์ด ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
์ด์ธ ์ถ๊ฐ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ณ์๋ค์ด ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ ์ฐธ๊ณ !
Python3_ROOT_DIR ์ ๊ธฐ๋ณธ์ ์ผ๋ก /opt/hostedtoolcache/Python/3.x.x/x64 ์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋๋ค
๋์ ๋๋ค.
์ด๋ ๊ฒ CMakeList.txt ๋ฅผ ์์ฑํ๋ฉด ์์์ ๋จธ์ (๋ฌ๋)์ ์ค์น๋ ํ์ด์ฌ ๋ฒ์ ์ ์ฐพ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ผ ์ด์ ์ก์ ์ ์คํ๋ณด๊ณ ๊ฒฐ๊ณผ๊ฐ์ ํ๋ฒ ๋ณด์ฃ .
3๊ฐ์ ๋ฌ๋์ ๊ฐ๊ฐ 3.10, 3.8, 3.9 ๋ฒ์ ์ด ์ค์น๋๊ณ , cmake ์์ ์ฌ์ฉ๋์์ต๋๋ค.
์ ํํ๋ ๊ฐ ํ์ด์ฌ ๋ฒ์ ์ swig ์์ ์ฌ์ฉ๋์์ต๋๋ค.
์ค๋์ cmake ์ matrix ๋ฅผ ์ด์ฉํ์ฌ ๋ค์ํ ํ์ด์ฌ ๋ฒ์ ์์ ๋น๋ ๋๋๋ก ํด๋ดค์ต๋๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ๊น์ง~