Occa: cmake 지원

에 λ§Œλ“  2018λ…„ 10μ›” 08일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: libocca/occa

μ•ˆλ…•ν•˜μ„Έμš” OCCA μ—¬λŸ¬λΆ„,

λΉŒλ“œ μ‹œμŠ€ν…œμ„ μƒμ„±ν•˜κΈ° μœ„ν•΄ cmakeλ₯Ό μ‚¬μš©ν•  κ³„νšμ΄ μžˆμŠ΅λ‹ˆκΉŒ?
λ‹Ήμ‚¬μ˜ λͺ¨λ“  κ³Όν•™ μ»΄ν“¨νŒ… μ†Œν”„νŠΈμ›¨μ–΄λŠ” 이λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 이것은 쒋은 λ…Έλ ₯이 ν•„μš”ν•˜μ§€λ§Œ 일단 μ™„λ£Œλ˜λ©΄ μ§€λΆˆν•©λ‹ˆλ‹€.

μ΅œμƒμ˜,

μ•„λ―Ή

question help wanted

λͺ¨λ“  11 λŒ“κΈ€

λ‚΄ 2μ„ΌνŠΈ...

λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” λ§Žμ€ μ†Œν”„νŠΈμ›¨μ–΄ νŒ¨ν‚€μ§€(예: VTK)λŠ” cmakeλ₯Ό μ‚¬μš©ν•˜μ—¬ ꡬ성 및 κ΅¬μΆ•λ˜μ§€λ§Œ ν•œ κ°€μ§€λŠ” μ‹«μ–΄ν•©λ‹ˆλ‹€. μž‘μ„±ν•΄μ•Ό ν•˜λŠ” cmake 언어와 μ½”λ“œκ°€ μ•„λ‹ˆλΌ 맀우 λͺ¨ν˜Έν•œ makefile "ꡬ성 μš”μ†Œ"에 λŒ€ν•΄ 깊고 λ‚œλ…ν™”λœ 디렉토리 ꡬ쑰둜 μƒμ„±ν•©λ‹ˆλ‹€. λ”°λΌμ„œ cmakeκ°€ μ‹€νŒ¨ν•˜λŠ” 이유, 컴파일이 μ œλŒ€λ‘œ λ˜μ§€ μ•ŠλŠ” 이유 λ˜λŠ” λΉŒλ“œλ₯Ό μ‘°μ •ν•˜λŠ” 방법을 μ•Œμ•„λ‚΄λŠ” 것은 (적어도 μ €μ—κ²ŒλŠ”) μ‚¬μ†Œν•œ λ…Έλ ₯이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

ꡬ성 사양에 따라 ν˜„μž¬ λΉŒλ“œ ν™˜κ²½μ— λŒ€ν•œ 메이크 νŒŒμΌμ„ μƒμ„±ν•˜λŠ” 것은 일반적으둜 쒋은 μΌμ΄μ§€λ§Œ 생성기가 무엇이든 IMHOλŠ” 읽기 κ°€λŠ₯ν•˜κ³  잠재적으둜 μ‘°μ •ν•  수 μžˆλŠ” λ‹¨μΌμ˜ λ‹¨μˆœν•˜κ³  κ°„λ‹¨ν•œ λ©”μ΄ν¬νŒŒμΌλ§Œ 생성해야 ν•©λ‹ˆλ‹€(예: μœ μ„œ κΉŠμ€ 'configure ' ν•˜λ‹€). 그것은 ν™•μ‹€νžˆ cmakeκ°€ μ•„λ‹™λ‹ˆλ‹€!

μ•ˆλ…• 폴,

λ‚˜λŠ” 그것을 μ’‹μ•„ν•˜μ§€ μ•Šμ§€λ§Œ 일단 ν”„λ‘œμ νŠΈμ— μ„€μΉ˜ν•˜λ©΄ κ½€ κ²¬κ³ ν•©λ‹ˆλ‹€. μ£Όμš” 이점은 톡합 및 ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ - κ°€μ • - OCCAλ₯Ό λ‹€μ†Œ 큰 μ½”λ“œλ‘œ ν†΅ν•©ν•˜κΈ° μ‹œμž‘ν•˜κ³  μ†ŒμŠ€λ₯Ό 3rdpartyλΌλŠ” 디렉토리에 λ„£κ³  cmakeλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 cmake에 μƒˆ 디렉토리 add_directory(...) . 그런 λ‹€μŒ "μƒμœ„" CMakeLists.txt의 컴파일러 및 기타 사양을 μ‚¬μš©ν•˜μ—¬ OCCAλ₯Ό μžλ™μœΌλ‘œ λΉŒλ“œν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ λ“œλΌμ΄λ²„(초기)μ—μ„œ OCCA에 쒅속성을 μΆ”κ°€ν•˜κ³  λ‚˜μ€‘μ— 더 λ§Žμ€ μ†ŒμŠ€/기타 디렉토리에 쒅속성을 μΆ”κ°€ν•˜λ©΄ 간단할 κ²ƒμž…λ‹ˆλ‹€.

cmake에 λŒ€ν•œ λ‚˜μ˜ κ²½ν—˜μ— λ”°λ₯΄λ©΄ "make" μˆ˜μ€€μ—μ„œ λ¬Έμ œκ°€ μžˆλŠ” 경우 일반적으둜 λ¬Έμ œλŠ” μ΅œμƒμœ„ μˆ˜μ€€μ—μ„œ cmakeλ₯Ό λ„ˆλ¬΄ 많이 μ „λ¬Έν™”ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€(예: λͺ…μ‹œμ  컴파일러 ν”Œλž˜κ·Έ κ°•μ œ 적용...). λŒ€λΆ€λΆ„μ˜ λ¬Έμ œμ—μ„œ make VERBOSE=1 은 무엇이 잘λͺ»λ˜μ—ˆλŠ”지 μ•Œμ•„λ‚΄κΈ° μœ„ν•΄ 전체 컴파일 라인(μž˜λΌλ‚΄κ³  뢙여넣을 수 있음)을 ν‘œμ‹œν•©λ‹ˆλ‹€(& 그런 λ‹€μŒ cmake(makeκ°€ μ•„λ‹˜)λ₯Ό λ³€κ²½).

μš°λ¦¬λŠ” λ˜ν•œ 항상 ctestλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€...

μ—¬ν•˜νŠΌ, 이것에 κ΄€ν•˜μ—¬ 물을 μ‹œν—˜ν•˜κ³  μ‹Άμ—ˆλ‹€.

μ΅œμƒμ˜,

μ•„λ―Ή

μ €λŠ” κ·Έκ²ƒμ˜ νŒ¬μž…λ‹ˆλ‹€( μ•„λ§ˆλ„ λ„ˆλ¬΄ 많이 κ·Έλ ‡κ² μ§€λ§Œ ). 사싀, CMake 지원이 μ œκ°€ κ°€μž₯ λ¨Όμ € μ°Ύμ•˜λ˜ κ²ƒμž…λ‹ˆλ‹€. λ‚˜λŠ” λͺ¨λ“  쒅속성(예: GooFit )을 extern의 git ν•˜μœ„ λͺ¨λ“ˆλ‘œ κ΄€λ¦¬ν•˜κ³  μ‚¬μš©μžκ°€ ν•˜μœ„ λͺ¨λ“ˆμ— λŒ€ν•΄ λͺ¨λ₯΄λŠ” 경우 CMakeκ°€ μ‚¬μš©μžλ₯Ό μœ„ν•΄ ν•΄λ‹Ή ν•­λͺ©μ„ ν™•μΈν•˜κ³  CMakeλŠ” λͺ¨λ“  쒅속성을 κ²°ν•©ν•©λ‹ˆλ‹€. CMake의 κ°€μž₯ 큰 μž₯점은 λͺ¨λ“  μž‘μ—… 방식을 μ§€μ›ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ Xcode와 같은 IDEλ₯Ό μ‚¬μš©ν•˜λ €λŠ” 경우 CMakeλ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ μ‰½μŠ΅λ‹ˆλ‹€. CCache, 디버그 λΉŒλ“œ, clang-tidy 등을 μ•„μ£Ό μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

@henryiii IDE 톡합이 μžˆλ‹€λ©΄ 쒋은 생각 κ°™μŠ΅λ‹ˆλ‹€!

make λŠ” λŒ€λΆ€λΆ„μ˜ μž₯μ†Œμ—μ„œ λ°”λ‘œ 찾을 수 있기 λ•Œλ¬Έμ— Makefile λΉŒλ“œλ₯Ό μ œκ±°ν•˜λŠ” 것을 μ£Όμ €ν•˜μ§€λ§Œ ν•¨κ»˜ CMake 지원을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. make 및 cmake λΉŒλ“œλ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ„λ‘ CI ꡬ성을 μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‹œκ°„μ΄ λ˜μ‹œλ©΄ 핡심 CMake 파일둜 PR을 ν•  수 μžˆλ‚˜μš”? 도움이 λœλ‹€λ©΄ λΉŒλ“œ μ‹œ μ˜ˆμƒλ˜λŠ” λͺ¨λ“  ν™˜κ²½ λ³€μˆ˜/λΆ€μž‘μš©μ„ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ μ‹ κ·œ/μ˜ˆμƒ OCCA μ‚¬μš©μž(HPC ν”„λ‘œκ·Έλž˜λ¨Έ)λŠ” OCCA μ†ŒμŠ€λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  make λ₯Ό μž…λ ₯ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€. λ‚˜μ—κ²Œ OCCA κ°€μΉ˜ μ œμ•ˆμ€ λΉŒλ“œ μ‹œμŠ€ν…œμ΄ μ•„λ‹ˆλΌ 병렬 ν”„λ‘œκ·Έλž˜λ° μ˜μ—­μ—μ„œ μ œκ³΅ν•˜λŠ” λ›°μ–΄λ‚œ κΈ°λŠ₯에 100% κΈ°λ°˜μ„ 두고 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  OCCAκ°€ cmake 기반 λΉŒλ“œλ‘œ μ΄λ™ν•˜λŠ” 데 μ•½κ°„μ˜ λΆ€κ°€ κ°€μΉ˜κ°€ μžˆμ„μ§€λ„ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

cmake 코딩에 μ •ν†΅ν•œ μ‚¬λžŒμ΄ ν•„μˆ˜ cmake νŒŒμΌμ„ μž‘μ„±ν•˜κ³  pull μš”μ²­μ„ 톡해 OCCA에 κΈ°μ—¬ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 그것은 일뢀 μ‚¬λžŒλ“€μ΄ 가지고 μžˆλŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 우렀λ₯Ό λ§Œμ‘±μ‹œν‚€κ³  μ‹€μ œλ‘œ OCCAλ₯Ό μ‚¬μš©ν•˜λŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

cmake의 주제둜 λŒμ•„κ°€μ„œ μ–΄μ¨Œλ“  우리 쀑 μΌλΆ€μ—κ²ŒλŠ” "λ§ˆμΌλ¦¬μ§€κ°€ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€." μ§„μ‹¬μœΌλ‘œ, λ§Œμ•½ λ‚΄κ°€ ν˜„μž¬μ˜ 초보자 이전 단계λ₯Ό λ„˜μ–΄μ„  μˆ˜μ€€μ—μ„œ cmake μ–Έμ–΄ μ½”λ“œλ₯Ό μž‘μ„±/디버그/μˆ˜μ •ν•˜λŠ” 방법을 μ‹€μ œλ‘œ λ°°μš΄λ‹€λ©΄ cmake에 λŒ€ν•œ 열정이 크게 λ†’μ•„μ§ˆ 것이라고 ν™•μ‹ ν•©λ‹ˆλ‹€. κ·Έ λ™μ•ˆ λˆ„κ΅°κ°€μ˜ 잘λͺ» μž‘μ„±λœ/였래된 CMakeLists.txt 및/λ˜λŠ” 버그가 μžˆκ±°λ‚˜ 잘λͺ» μž‘μ„±λœ Find*.cmake 파일이 방금 λ‹€μš΄λ‘œλ“œν•œ 일뢀 νŒ¨ν‚€μ§€μ— λŒ€ν•΄ μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ” λ¬Έμ œμ— μ§λ©΄ν–ˆμ„ λ•Œ 평가λ₯Ό μœ„ν•œ github, 뢀정적인 ν‰κ°€μ˜ λΆˆμΎŒν•œ 감각을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€!

@pdhahn λͺ…ν™•νžˆ ν•˜μžλ©΄ , "μ»΄νŒŒμΌν•  μœ μΌν•œ μœ ν˜• make " λΉŒλ“œλ₯Ό μ œκ±°ν•˜μ§€ μ•Šμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. ν™•μ‹€νžˆ 정리가 ν•„μš”ν•˜μ§€λ§Œ(#149) μ‚¬μš©μžκ°€ μ„€μΉ˜ 및 μ‚¬μš©μ„ κ°„λ‹¨ν•˜κ²Œ ν•˜λŠ” 것이 μ—¬κΈ°μ—μ„œ μ΅œμš°μ„  μˆœμœ„μž…λ‹ˆλ‹€.

CMakeλ₯Ό μΆ”κ°€ν•˜λ©΄ 이미 CMakeλ₯Ό μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ νŠΈμ—μ„œ OCCAλ₯Ό μ‚¬μš©ν•˜λŠ” 데 도움이 되며 이 IDE ν†΅ν•©μœΌλ‘œ 개발자의 삢을 더 μ‰½κ²Œ λ§Œλ“œλŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

@dmed256 λ§žμŠ΅λ‹ˆλ‹€ . IDEλŠ” OCCA에 μ‚¬μ†Œν•˜μ§€ μ•Šμ€ λΆ€κ°€ κ°€μΉ˜κ°€ 될 수 μžˆλŠ” κ²ƒμ²˜λŸΌ λ“€λ¦½λ‹ˆλ‹€!

κ·ΈλŸ¬λ‚˜ μ΅œμ†Œν•œ Eclipse 및 Qt Creator와 같이 널리 μ‚¬μš©λ˜λŠ” λ‹€μ–‘ν•œ IDEλ₯Ό μˆ˜μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

CMakeλŠ” IDE뿐만 μ•„λ‹ˆλΌ λͺ¨λ“  μ’…λ₯˜μ˜ 도ꡬ(및 λͺ¨λ“  μ’…λ₯˜μ˜ 도ꡬ가 지원)λ₯Ό μ§€μ›ν•©λ‹ˆλ‹€. λͺ¨λ“  μ£Όμš” IDEλŠ” CMakeμ—μ„œ μ§€μ›ν•˜κ±°λ‚˜ CMakeμ—μ„œ μ§€μ›ν•©λ‹ˆλ‹€. CLion, Qt Creator, Eclip, Xcode λ“± λ˜ν•œ link-what-you-use, include-what-you-use, clang-tidy, ccache, λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈ 톡합, νŒ¨ν‚€μ§• 등을 μ§€μ›ν•©λ‹ˆλ‹€.

CMake λΉŒλ“œκ°€ 잘 μž‘λ™ν–ˆλ‹€λ©΄ κ²°κ΅­ Makefile이 CMakeλ₯Ό ν˜ΈμΆœν•˜λ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이전에 GooFitμ—μ„œ 이 μž‘μ—…μ„ μˆ˜ν–‰ν•œ 적이 μžˆμŠ΅λ‹ˆλ‹€. makefile이 CMakeλ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  ν˜ΈμΆœν•˜λ„λ‘ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ–΄λ””μ—μ„œλ‚˜ μ΅œμ‹  λ²„μ „μ—μ„œ μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€(μ‹€ν–‰ 쀑인 μœ„μΉ˜μ— 따라 linux λ˜λŠ” macos λ°”μ΄λ„ˆλ¦¬λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λŠ” κ°„λ‹¨ν•œ ν† κΈ€λ§Œ 있으면 λ©λ‹ˆλ‹€).

μ•žμœΌλ‘œ λͺ‡ μ£Ό μ•ˆμ— occaλ₯Ό ν‰κ°€ν•˜κ³  CMake 지원을 λ„μšΈ 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

@henryiii 그건 말이 λ©λ‹ˆλ‹€. μš°λ¦¬μ—κ²ŒλŠ” μ‹œκ°„μ΄ λ„ˆλ¬΄ λ§ŽμŠ΅λ‹ˆλ‹€. :) κ·ΈλŸΌμ—λ„ λΆˆκ΅¬ν•˜κ³  CMake의 쑰언에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

@hknibbe2 , @SFrijters , @amikstcyr , @JamesEggleton 의 λͺ¨λ“  μž‘μ—…μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€ πŸŽ‰

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰