{"id":1968,"date":"2025-03-24T08:48:37","date_gmt":"2025-03-23T23:48:37","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1968"},"modified":"2025-03-24T08:49:01","modified_gmt":"2025-03-23T23:49:01","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91cmake%e3%83%93%e3%83%ab%e3%83%89%e3%81%ae%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a7%e3%81%a4%e3%81%ae%e5%9f%ba%e6%9c%ac%e6%89%8b%e9%a0%86","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1968","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011CMake\u30d3\u30eb\u30c9\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a7\u3064\u306e\u57fa\u672c\u624b\u9806\u30685\u3064\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">CMake\u30d3\u30eb\u30c9\u306e\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">CMake\u3068\u306f\uff1a\u30e2\u30c0\u30f3C++\u958b\u767a\u306b\u304a\u3051\u308b\u91cd\u8981\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u306a\u305c\u4ecaCMake\u304c\u5fc5\u8981\u3068\u3055\u308c\u3066\u3044\u308b\u306e\u304b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">CMake\u30d3\u30eb\u30c9\u306e\u57fa\u672c\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u306e\u6574\u7406\u3068CMakeLists.txt\u306e\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u30d3\u30eb\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u3068\u30d3\u30eb\u30c9\u8a2d\u5b9a<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u9023\u643a<\/a>      <\/li>      <li>        <a href=\"#i-7\">\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-8\">\u751f\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u78ba\u8a8d\u3068\u5b9f\u884c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">CMake\u30d3\u30eb\u30c9\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">\u4e26\u5217\u30d3\u30eb\u30c9\u306b\u3088\u308b\u51e6\u7406\u6642\u9593\u306e\u77ed\u7e2e<\/a>      <\/li>      <li>        <a href=\"#i-11\">\u30ad\u30e3\u30c3\u30b7\u30e5\u7ba1\u7406\u306b\u3088\u308b\u52b9\u7387\u5316<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u6761\u4ef6\u4ed8\u304d\u30d3\u30eb\u30c9\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\u3088\u304f\u3042\u308b\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">\u30d1\u30b9\u8a2d\u5b9a\u95a2\u9023\u306e\u30a8\u30e9\u30fc\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u4f9d\u5b58\u95a2\u4fc2\u306e\u30a8\u30e9\u30fc\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u30b3\u30f3\u30d1\u30a4\u30e9\u4e92\u63db\u6027\u306e\u554f\u984c\u3078\u306e\u5bfe\u5fdc<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306eCMake\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6a19\u6e96\u306e\u78ba\u7acb\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3068\u306e\u9023\u643a\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">CI\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-21\">\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u958b\u767a\u3067\u306e\u6ce8\u610f\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">Windows\u74b0\u5883\u7279\u6709\u306e\u8a2d\u5b9a\u3068\u5bfe\u5fdc<\/a>      <\/li>      <li>        <a href=\"#i-23\">Linux\u74b0\u5883\u3067\u306e\u6700\u9069\u5316\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">MacOS\u5bfe\u5fdc\u3067\u306e\u7559\u610f\u70b9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-25\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1aCMake\u30d3\u30eb\u30c9\u306e\u5fdc\u7528\u3068\u767a\u5c55<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-26\">\u30ab\u30b9\u30bf\u30e0\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4f5c\u6210\u3068\u6d3b\u7528<\/a>      <\/li>      <li>        <a href=\"#i-27\">\u5916\u90e8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7d71\u5408\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-28\">\u81ea\u52d5\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u69cb\u7bc9\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">CMake\u30d3\u30eb\u30c9\u306e\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">CMake\u3068\u306f\uff1a\u30e2\u30c0\u30f3C++\u958b\u767a\u306b\u304a\u3051\u308b\u91cd\u8981\u6027<\/h3>\n\n\n\n<p>CMake\u306f\u3001\u73fe\u4ee3\u306eC++\u958b\u767a\u306b\u304a\u3044\u3066\u6700\u3082\u5e83\u304f\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3067\u3059\u3002\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b\u4f9d\u5b58\u3057\u306a\u3044\u65b9\u6cd5\u3067\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u3092\u8a18\u8ff0\u3057\u3001\u69d8\u3005\u306a\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\uff08Make\u3001Visual Studio\u3001Ninja\u7b49\uff09\u5411\u3051\u306e\u30d3\u30eb\u30c9\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3067\u304d\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n\n\n\n<p>CMake\u306e\u4e3b\u306a\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5bfe\u5fdc\uff1aWindows\u3001Linux\u3001macOS\u306a\u3069\u3001\u7570\u306a\u308bOS\u3067\u540c\u3058\u30d3\u30eb\u30c9\u8a2d\u5b9a\u3092\u4f7f\u7528\u53ef\u80fd<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u69cb\u6210\u7ba1\u7406\uff1a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u3084\u30d3\u30eb\u30c9\u8a2d\u5b9a\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30c4\u30fc\u30eb\u9023\u643a\uff1a\u69d8\u3005\u306aIDE\u3084\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u3068\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u7d71\u5408<\/li>\n\n\n\n<li>\u30e2\u30c0\u30f3\u306a\u30d3\u30eb\u30c9\u6a5f\u80fd\uff1a\u4e26\u5217\u30d3\u30eb\u30c9\u3001\u6761\u4ef6\u4ed8\u304d\u30d3\u30eb\u30c9\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u7ba1\u7406\u306a\u3069\u3092\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u306a\u305c\u4ecaCMake\u304c\u5fc5\u8981\u3068\u3055\u308c\u3066\u3044\u308b\u306e\u304b<\/h3>\n\n\n\n<p>\u73fe\u4ee3\u306eC++\u958b\u767a\u74b0\u5883\u306b\u304a\u3044\u3066\u3001CMake\u304c\u5fc5\u9808\u30c4\u30fc\u30eb\u3068\u3057\u3066\u8a8d\u8b58\u3055\u308c\u3066\u3044\u308b\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8907\u96d1\u5316\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u3078\u306e\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u898f\u6a21\u306a\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u7ba1\u7406<\/li>\n\n\n\n<li>\u5916\u90e8\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f9d\u5b58\u95a2\u4fc2\u51e6\u7406<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3055\u308c\u305f\u958b\u767a\u306e\u4fc3\u9032<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u4e26\u5217\u30d3\u30eb\u30c9\u306e\u6709\u52b9\u5316\u4f8b\n   cmake_minimum_required(VERSION 3.10)\n   project(MyProject)\n\n   # \u30de\u30eb\u30c1\u30b3\u30a2\u30d3\u30eb\u30c9\u306e\u8a2d\u5b9a\n   include(ProcessorCount)\n   ProcessorCount(N)\n   if(NOT N EQUAL 0)\n     set(CMAKE_BUILD_PARALLEL_LEVEL ${N})\n   endif()<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c1\u30fc\u30e0\u958b\u767a\u306e\u6a19\u6e96\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7d71\u4e00\u3055\u308c\u305f\u30d3\u30eb\u30c9\u74b0\u5883\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a\u306e\u4e00\u5143\u7ba1\u7406<\/li>\n\n\n\n<li>CI\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3068\u306e\u89aa\u548c\u6027<\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u958b\u767a\u306e\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5225\u306e\u8a2d\u5b9a\u4f8b\n   if(WIN32)\n     add_definitions(-DWINDOWS_BUILD)\n   elseif(UNIX)\n     add_definitions(-DUNIX_BUILD)\n   endif()<\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u6700\u65b0\u306eC++\u6a5f\u80fd\u3078\u306e\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C++17\u3001C++20\u306a\u3069\u306e\u65b0\u6a5f\u80fd\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d1\u30a4\u30e9\u30d5\u30e9\u30b0\u306e\u67d4\u8edf\u306a\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # C++17\u306e\u6709\u52b9\u5316\u4f8b\n   set(CMAKE_CXX_STANDARD 17)\n   set(CMAKE_CXX_STANDARD_REQUIRED ON)<\/pre>\n\n\n\n<p>CMake\u306e\u63a1\u7528\u306b\u3088\u3063\u3066\u5f97\u3089\u308c\u308b\u5177\u4f53\u7684\u306a\u30e1\u30ea\u30c3\u30c8\uff1a<\/p>\n\n\n<div id=\"id-bb8a150c-1f93-4819-b010-b0851bc87c11\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30e1\u30ea\u30c3\u30c8<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td>\u30d3\u30eb\u30c9\u6642\u9593\u306e\u77ed\u7e2e<\/td><td>\u4e26\u5217\u30d3\u30eb\u30c9\u3084\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u306b\u3088\u308b\u9ad8\u901f\u5316<\/td><\/tr><tr><td>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u5411\u4e0a<\/td><td>\u7d71\u4e00\u3055\u308c\u305f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u3088\u308b\u7ba1\u7406\u306e\u7c21\u7d20\u5316<\/td><\/tr><tr><td>\u79fb\u690d\u6027\u306e\u78ba\u4fdd<\/td><td>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u9593\u3067\u306e\u4e92\u63db\u6027\u7dad\u6301<\/td><\/tr><tr><td>CI\/CD\u5bfe\u5fdc<\/td><td>\u81ea\u52d5\u5316\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3068\u306e\u5bb9\u6613\u306a\u7d71\u5408<\/td><\/tr><tr><td>\u958b\u767a\u74b0\u5883\u306e\u7d71\u4e00<\/td><td>\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u4e00\u8cab\u3057\u305f\u958b\u767a\u4f53\u5236\u306e\u78ba\u7acb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u6700\u65b0\u306eC++\u958b\u767a\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u9ad8\u5ea6\u306a\u8981\u4ef6\u3082\u5897\u3048\u3066\u304a\u308a\u3001CMake\u306f\u3053\u308c\u3089\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30e2\u30b8\u30e5\u30e9\u30fc\u958b\u767a<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  # \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5225\u306e\u30d3\u30eb\u30c9\u8a2d\u5b9a\n  add_subdirectory(core)\n  add_subdirectory(plugins)\n  add_subdirectory(tests)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u7d71\u5408<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  # GoogleTest\u306e\u7d71\u5408\u4f8b\n  enable_testing()\n  add_subdirectory(test)\n  add_test(NAME MyTests COMMAND test_executable)<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30d1\u30c3\u30b1\u30fc\u30b8\u7ba1\u7406<\/strong>\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  # \u5916\u90e8\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\n  find_package(Boost REQUIRED COMPONENTS system filesystem)\n  target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::filesystem)<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001CMake\u306f\u5358\u306a\u308b\u30d3\u30eb\u30c9\u30c4\u30fc\u30eb\u3092\u8d85\u3048\u3066\u3001\u73fe\u4ee3\u306eC++\u958b\u767a\u306b\u304a\u3051\u308b\u7d71\u5408\u7684\u306a\u958b\u767a\u57fa\u76e4\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3066\u3044\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u5b9f\u969b\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u57fa\u672c\u7684\u306a\u624b\u9806\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">CMake\u30d3\u30eb\u30c9\u306e\u57fa\u672c\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u306e\u6574\u7406\u3068CMakeLists.txt\u306e\u4f5c\u6210<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306aCMake\u30d3\u30eb\u30c9\u306e\u7b2c\u4e00\u6b69\u306f\u3001\u9069\u5207\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u306e\u8a2d\u8a08\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u6a19\u6e96\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">my_project\/\n\u251c\u2500\u2500 CMakeLists.txt\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 main.cpp\n\u2502   \u251c\u2500\u2500 core\/\n\u2502   \u2514\u2500\u2500 utils\/\n\u251c\u2500\u2500 include\/\n\u2502   \u2514\u2500\u2500 my_project\/\n\u251c\u2500\u2500 tests\/\n\u2514\u2500\u2500 build\/<\/pre>\n\n\n\n<p>\u57fa\u672c\u7684\u306aCMakeLists.txt\u306e\u4f5c\u6210\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u5c0f\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u6307\u5b9a\ncmake_minimum_required(VERSION 3.10)\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3068\u4f7f\u7528\u8a00\u8a9e\u306e\u8a2d\u5b9a\nproject(MyProject VERSION 1.0\n        DESCRIPTION \"My awesome C++ project\"\n        LANGUAGES CXX)\n\n# C++\u6a19\u6e96\u306e\u8a2d\u5b9a\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# \u30bd\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\u306e\u53ce\u96c6\nfile(GLOB_RECURSE SOURCES \"src\/*.cpp\")\n\n# \u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\nadd_executable(${PROJECT_NAME} ${SOURCES})\n\n# \u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u8a2d\u5b9a\ntarget_include_directories(${PROJECT_NAME} PRIVATE\n    ${PROJECT_SOURCE_DIR}\/include\n    ${PROJECT_SOURCE_DIR}\/src\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30d3\u30eb\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u3068\u30d3\u30eb\u30c9\u8a2d\u5b9a<\/h3>\n\n\n\n<p>\u30bd\u30fc\u30b9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3068\u30d3\u30eb\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5206\u96e2\u3059\u308b\u300cout-of-source\u300d\u30d3\u30eb\u30c9\u3092\u63a8\u5968\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d3\u30eb\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\u3068\u79fb\u52d5\nmkdir build &amp;&amp; cd build\n\n# CMake\u306e\u5b9f\u884c\uff08Unix\u30b7\u30b9\u30c6\u30e0\u306e\u5834\u5408\uff09\ncmake ..\n\n# Windows\u306e\u5834\u5408\uff08Visual Studio 2019\u7528\uff09\ncmake .. -G \"Visual Studio 16 2019\"<\/pre>\n\n\n\n<p>\u4e3b\u8981\u306aCMake\u30d3\u30eb\u30c9\u30bf\u30a4\u30d7\uff1a<\/p>\n\n\n<div id=\"id-a2f8dc30-31cb-41e6-ad8d-80efd6debc7f\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d3\u30eb\u30c9\u30bf\u30a4\u30d7<\/th><th>\u8aac\u660e<\/th><th>\u4f7f\u7528\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>Debug<\/td><td>\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u4ed8\u304d\u30d3\u30eb\u30c9<\/td><td><code>cmake -DCMAKE_BUILD_TYPE=Debug ..<\/code><\/td><\/tr><tr><td>Release<\/td><td>\u6700\u9069\u5316\u3055\u308c\u305f\u30ea\u30ea\u30fc\u30b9\u30d3\u30eb\u30c9<\/td><td><code>cmake -DCMAKE_BUILD_TYPE=Release ..<\/code><\/td><\/tr><tr><td>RelWithDebInfo<\/td><td>\u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u4ed8\u304d\u30ea\u30ea\u30fc\u30b9<\/td><td><code>cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..<\/code><\/td><\/tr><tr><td>MinSizeRel<\/td><td>\u30b5\u30a4\u30ba\u6700\u9069\u5316\u30d3\u30eb\u30c9<\/td><td><code>cmake -DCMAKE_BUILD_TYPE=MinSizeRel ..<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u9023\u643a<\/h3>\n\n\n\n<p>\u5916\u90e8\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7d71\u5408\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Boost library\u306e\u691c\u7d22\nfind_package(Boost REQUIRED COMPONENTS system filesystem)\n\n# OpenCV\u306e\u691c\u7d22\u3068\u9023\u643a\nfind_package(OpenCV REQUIRED)\n\n# \u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u306b\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30ea\u30f3\u30af\ntarget_link_libraries(${PROJECT_NAME} PRIVATE\n    Boost::system\n    Boost::filesystem\n    ${OpenCV_LIBS}\n)<\/pre>\n\n\n\n<p>\u30ab\u30b9\u30bf\u30e0\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f5c\u6210\u3068\u9023\u643a\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f5c\u6210\nadd_library(my_lib STATIC\n    src\/lib\/feature1.cpp\n    src\/lib\/feature2.cpp\n)\n\n# \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u8a2d\u5b9a\ntarget_include_directories(my_lib PUBLIC\n    ${PROJECT_SOURCE_DIR}\/include\n)\n\n# \u30e1\u30a4\u30f3\u30bf\u30fc\u30b2\u30c3\u30c8\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u9023\u643a\ntarget_link_libraries(${PROJECT_NAME} PRIVATE my_lib)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30d3\u30eb\u30c9\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u8a2d\u5b9a<\/h3>\n\n\n\n<p>CMake\u30d3\u30eb\u30c9\u306e\u4e3b\u8981\u30b3\u30de\u30f3\u30c9\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5358\u7d14\u306a\u30d3\u30eb\u30c9\ncmake --build .\n\n# \u4e26\u5217\u30d3\u30eb\u30c9\uff088\u3064\u306e\u30b8\u30e7\u30d6\u3092\u4f7f\u7528\uff09\ncmake --build . -j 8\n\n# \u7279\u5b9a\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u30d3\u30eb\u30c9\ncmake --build . --target my_executable\n\n# \u30af\u30ea\u30fc\u30f3\u30d3\u30eb\u30c9\ncmake --build . --clean-first<\/pre>\n\n\n\n<p>\u3088\u304f\u4f7f\u7528\u3059\u308bCMake\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d1\u30a4\u30e9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\ntarget_compile_options(${PROJECT_NAME} PRIVATE\n    -Wall            # \u5168\u3066\u306e\u8b66\u544a\u3092\u6709\u52b9\u5316\n    -Wextra          # \u8ffd\u52a0\u306e\u8b66\u544a\u3092\u6709\u52b9\u5316\n    -Werror          # \u8b66\u544a\u3092\u30a8\u30e9\u30fc\u3068\u3057\u3066\u6271\u3046\n)\n\n# \u30d7\u30ea\u30d7\u30ed\u30bb\u30c3\u30b5\u5b9a\u7fa9\u306e\u8ffd\u52a0\ntarget_compile_definitions(${PROJECT_NAME} PRIVATE\n    DEBUG_MODE\n    VERSION=\"1.0.0\"\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u751f\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u78ba\u8a8d\u3068\u5b9f\u884c<\/h3>\n\n\n\n<p>\u30d3\u30eb\u30c9\u6210\u679c\u7269\u306e\u78ba\u8a8d\u3068\u7ba1\u7406\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u306e\u5834\u6240\uff08\u30d3\u30eb\u30c9\u30bf\u30a4\u30d7\u306b\u3088\u3063\u3066\u7570\u306a\u308b\uff09\n.\/build\/Debug\/my_project     # Debug\u30d3\u30eb\u30c9\n.\/build\/Release\/my_project   # Release\u30d3\u30eb\u30c9\n\n# \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u8a2d\u5b9a\ninstall(TARGETS ${PROJECT_NAME}\n    RUNTIME DESTINATION bin\n    LIBRARY DESTINATION lib\n    ARCHIVE DESTINATION lib\/static\n)\n\n# \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u5b9f\u884c\ncmake --install . --prefix \/usr\/local<\/pre>\n\n\n\n<p>\u30c7\u30d0\u30c3\u30b0\u6642\u306e\u91cd\u8981\u306a\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u4f9d\u5b58\u95a2\u4fc2\u306e\u89e3\u6c7a\u72b6\u6cc1<\/li>\n\n\n\n<li>\u751f\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u6a29\u9650\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u5171\u6709\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d1\u30b9\u8a2d\u5b9a<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u306e\u57fa\u672c\u624b\u9806\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001CMake\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u624b\u9806\u3092\u8e0f\u307e\u3048\u305f\u4e0a\u3067\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">CMake\u30d3\u30eb\u30c9\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u4e26\u5217\u30d3\u30eb\u30c9\u306b\u3088\u308b\u51e6\u7406\u6642\u9593\u306e\u77ed\u7e2e<\/h3>\n\n\n\n<p>\u4e26\u5217\u30d3\u30eb\u30c9\u306f\u3001\u30de\u30eb\u30c1\u30b3\u30a2\u30d7\u30ed\u30bb\u30c3\u30b5\u306e\u6027\u80fd\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3059\u308b\u91cd\u8981\u306a\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3067\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CMake\u3067\u306e\u4e26\u5217\u30d3\u30eb\u30c9\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># CMakeLists.txt\u3067\u306e\u4e26\u5217\u30d3\u30eb\u30c9\u8a2d\u5b9a\ninclude(ProcessorCount)\nProcessorCount(N)\nif(NOT N EQUAL 0)\n    set(CMAKE_BUILD_PARALLEL_LEVEL ${N})\n    message(STATUS \"Building with ${N} processors\")\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3067\u306e\u4e26\u5217\u30d3\u30eb\u30c9\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5229\u7528\u53ef\u80fd\u306a\u3059\u3079\u3066\u306e\u30b3\u30a2\u3092\u4f7f\u7528\ncmake --build . -j\n\n# \u7279\u5b9a\u6570\u306e\u30b8\u30e7\u30d6\u3092\u6307\u5b9a\ncmake --build . -j 8<\/pre>\n\n\n\n<p>\u4e26\u5217\u30d3\u30eb\u30c9\u306e\u52b9\u679c\uff08\u4e00\u822c\u7684\u306a\u4f8b\uff09\uff1a<\/p>\n\n\n<div id=\"id-71bd2f43-16f0-46c2-94ee-d62e392760b8\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30b5\u30a4\u30ba<\/th><th>\u901a\u5e38\u30d3\u30eb\u30c9<\/th><th>\u4e26\u5217\u30d3\u30eb\u30c9\uff088\u30b3\u30a2\uff09<\/th><th>\u77ed\u7e2e\u7387<\/th><\/tr><\/thead><tbody><tr><td>\u5c0f\uff08\u301c10\u30d5\u30a1\u30a4\u30eb\uff09<\/td><td>30\u79d2<\/td><td>10\u79d2<\/td><td>66%<\/td><\/tr><tr><td>\u4e2d\uff08\u301c50\u30d5\u30a1\u30a4\u30eb\uff09<\/td><td>3\u5206<\/td><td>45\u79d2<\/td><td>75%<\/td><\/tr><tr><td>\u5927\uff08100+\u30d5\u30a1\u30a4\u30eb\uff09<\/td><td>15\u5206<\/td><td>3\u5206<\/td><td>80%<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30ad\u30e3\u30c3\u30b7\u30e5\u7ba1\u7406\u306b\u3088\u308b\u52b9\u7387\u5316<\/h3>\n\n\n\n<p>CMake\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u52b9\u679c\u7684\u306b\u7ba1\u7406\u3059\u308b\u3053\u3068\u3067\u3001\u30d3\u30eb\u30c9\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u5909\u6570\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u5909\u6570\u306e\u8a2d\u5b9a\u4f8b\nset(MY_CACHE_VAR \"value\" CACHE STRING \"Description\")\n\n# \u6761\u4ef6\u4ed8\u304d\u30ad\u30e3\u30c3\u30b7\u30e5\u66f4\u65b0\nif(NOT DEFINED CACHE{MY_CACHE_VAR})\n    set(MY_CACHE_VAR \"default\" CACHE STRING \"Description\" FORCE)\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ea\u30b3\u30f3\u30d1\u30a4\u30eb\u6e08\u307f\u30d8\u30c3\u30c0\u30fc\uff08PCH\uff09\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># PCH\u306e\u8a2d\u5b9a\ntarget_precompile_headers(${PROJECT_NAME} PRIVATE\n    &lt;vector&gt;\n    &lt;string&gt;\n    &lt;map&gt;\n    \"project_common.h\"\n)<\/pre>\n\n\n\n<p>\u30ad\u30e3\u30c3\u30b7\u30e5\u7ba1\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CMake\u30ad\u30e3\u30c3\u30b7\u30e5\u30d5\u30a1\u30a4\u30eb\u306e\u5b9a\u671f\u7684\u306a\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30af\u30ea\u30a2\nrm -rf CMakeCache.txt CMakeFiles\/\n\n# \u65b0\u898f\u30d3\u30eb\u30c9\ncmake ..<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u30a8\u30f3\u30c8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5fc5\u8981\u6700\u5c0f\u9650\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30a8\u30f3\u30c8\u30ea\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL \"\")\nmark_as_advanced(CMAKE_BUILD_TYPE)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u6761\u4ef6\u4ed8\u304d\u30d3\u30eb\u30c9\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u6761\u4ef6\u4ed8\u304d\u30d3\u30eb\u30c9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5fc5\u8981\u306a\u90e8\u5206\u306e\u307f\u3092\u30d3\u30eb\u30c9\u3057\u3001\u30d3\u30eb\u30c9\u6642\u9593\u3092\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d3\u30eb\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u5b9a\u7fa9\noption(BUILD_TESTS \"Build test cases\" OFF)\noption(BUILD_DOCS \"Build documentation\" OFF)\noption(ENABLE_OPTIMIZATION \"Enable optimization\" ON)\n\n# \u6761\u4ef6\u4ed8\u304d\u30d3\u30eb\u30c9\nif(BUILD_TESTS)\n    add_subdirectory(tests)\nendif()\n\nif(BUILD_DOCS)\n    add_subdirectory(docs)\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u56fa\u6709\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u5225\u306e\u6700\u9069\u5316\u8a2d\u5b9a\nif(MSVC)\n    # Visual Studio\u306e\u6700\u9069\u5316\u30d5\u30e9\u30b0\n    target_compile_options(${PROJECT_NAME} PRIVATE\n        \/O2        # \u6700\u9069\u5316\u30ec\u30d9\u30eb\n        \/GL        # \u5168\u4f53\u306e\u6700\u9069\u5316\n        \/MP        # \u30de\u30eb\u30c1\u30d7\u30ed\u30bb\u30c3\u30b5\u30fc\u30b3\u30f3\u30d1\u30a4\u30eb\n    )\nelse()\n    # GCC\/Clang\u306e\u6700\u9069\u5316\u30d5\u30e9\u30b0\n    target_compile_options(${PROJECT_NAME} PRIVATE\n        -O3        # \u6700\u9069\u5316\u30ec\u30d9\u30eb\n        -march=native  # CPU\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u6700\u9069\u5316\n        -flto      # \u30ea\u30f3\u30af\u6642\u6700\u9069\u5316\n    )\nendif()<\/pre>\n\n\n\n<p>\u6700\u9069\u5316\u306e\u52b9\u679c\u3092\u6700\u5927\u5316\u3059\u308b\u305f\u3081\u306eTips\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30cb\u30c6\u30a3\u30d3\u30eb\u30c9\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e6\u30cb\u30c6\u30a3\u30d3\u30eb\u30c9\u306e\u8a2d\u5b9a\nset(CMAKE_UNITY_BUILD ON)\nset(CMAKE_UNITY_BUILD_BATCH_SIZE 10)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u4f9d\u5b58\u95a2\u4fc2\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u5c0f\u9650\u306e\u4f9d\u5b58\u95a2\u4fc2\u8a2d\u5b9a\ntarget_link_libraries(${PROJECT_NAME} PRIVATE\n    $&lt;$&lt;CONFIG:Debug&gt;:debug_lib&gt;\n    $&lt;$&lt;CONFIG:Release&gt;:release_lib&gt;\n)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30ad\u30e3\u30c3\u30b7\u30e5\u30c4\u30fc\u30eb\u306e\u7d71\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># ccache\u306e\u8a2d\u5b9a\u4f8b\nfind_program(CCACHE_PROGRAM ccache)\nif(CCACHE_PROGRAM)\n    set(CMAKE_CXX_COMPILER_LAUNCHER \"${CCACHE_PROGRAM}\")\n    message(STATUS \"Using ccache: ${CCACHE_PROGRAM}\")\nendif()<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3082\u52b9\u7387\u7684\u306a\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u3092\u884c\u3046\u969b\u306b\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u306e\u3042\u308b\u4e00\u822c\u7684\u306a\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">\u3088\u304f\u3042\u308b\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30d1\u30b9\u8a2d\u5b9a\u95a2\u9023\u306e\u30a8\u30e9\u30fc\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u201cCould not find package\u201d\u30a8\u30e9\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CMake Error at CMakeLists.txt:10 (find_package):\n  Could not find package \"Boost\"<\/pre>\n\n\n\n<p>\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d1\u30b9\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\nset(Boost_ROOT \"C:\/local\/boost_1_76_0\")\nset(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} \"C:\/local\/boost_1_76_0\")\n\n# \u691c\u7d22\u30d1\u30b9\u306e\u8ffd\u52a0\nlist(APPEND CMAKE_MODULE_PATH \"${CMAKE_SOURCE_DIR}\/cmake\/modules\")\n\n# \u5fc5\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u6307\u5b9a\nfind_package(Boost REQUIRED COMPONENTS system filesystem\n    HINTS ${BOOST_ROOT}\n    PATH_SUFFIXES lib64 lib\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30d1\u30b9\u306e\u554f\u984c<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">fatal error: myheader.h: No such file or directory<\/pre>\n\n\n\n<p>\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u8ffd\u52a0\ntarget_include_directories(${PROJECT_NAME} PRIVATE\n    ${PROJECT_SOURCE_DIR}\/include\n    ${PROJECT_BINARY_DIR}\/generated\n    $&lt;BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}\/internal&gt;\n)\n\n# \u30b7\u30b9\u30c6\u30e0\u30a4\u30f3\u30af\u30eb\u30fc\u30c9\u306e\u8a2d\u5b9a\ntarget_include_directories(${PROJECT_NAME} SYSTEM PRIVATE\n    ${THIRD_PARTY_INCLUDES}\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u4f9d\u5b58\u95a2\u4fc2\u306e\u30a8\u30e9\u30fc\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30f3\u30af\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">undefined reference to `function_name'<\/pre>\n\n\n\n<p>\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ea\u30f3\u30af\u9806\u5e8f\u306e\u6700\u9069\u5316\ntarget_link_libraries(${PROJECT_NAME} PRIVATE\n    dependent_lib1  # \u6700\u3082\u4f9d\u5b58\u3055\u308c\u308b\u5074\n    dependent_lib2\n    ${PROJECT_LIBS} # \u6700\u3082\u4f9d\u5b58\u3059\u308b\u5074\n)\n\n# \u30ea\u30f3\u30af\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u8ffd\u52a0\nset_target_properties(${PROJECT_NAME} PROPERTIES\n    LINK_FLAGS \"${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-as-needed\"\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5faa\u74b0\u4f9d\u5b58\u306e\u89e3\u6c7a<\/strong><\/li>\n<\/ol>\n\n\n\n<p>\u30a8\u30e9\u30fc\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CMake Error: Circular dependency in target graph detected<\/pre>\n\n\n\n<p>\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f5c\u6210\nadd_library(interface_lib INTERFACE)\ntarget_include_directories(interface_lib INTERFACE\n    ${PROJECT_SOURCE_DIR}\/include\n)\n\n# \u4f9d\u5b58\u95a2\u4fc2\u306e\u5206\u5272\nadd_library(lib1 STATIC ${LIB1_SOURCES})\nadd_library(lib2 STATIC ${LIB2_SOURCES})\ntarget_link_libraries(lib1 PUBLIC interface_lib)\ntarget_link_libraries(lib2 PUBLIC interface_lib)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30b3\u30f3\u30d1\u30a4\u30e9\u4e92\u63db\u6027\u306e\u554f\u984c\u3078\u306e\u5bfe\u5fdc<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30e9\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0d\u4e00\u81f4<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30f3\u30d1\u30a4\u30e9\u30d0\u30fc\u30b8\u30e7\u30f3\u30c1\u30a7\u30c3\u30af\nif(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)\n    message(FATAL_ERROR \"GCC version must be at least 9.0!\")\nendif()\n\n# \u7279\u5b9a\u306e\u6a5f\u80fd\u306e\u4e92\u63db\u6027\u30c1\u30a7\u30c3\u30af\ninclude(CheckCXXSourceCompiles)\ncheck_cxx_source_compiles(\"\n    #include &lt;concepts&gt;\n    template&lt;typename T&gt;\n    concept Numeric = std::integral&lt;T&gt; || std::floating_point&lt;T&gt;;\n    int main() { return 0; }\n\" HAVE_CONCEPTS)\n\nif(NOT HAVE_CONCEPTS)\n    message(WARNING \"Compiler does not support concepts, falling back...\")\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u56fa\u6709\u306e\u554f\u984c\u89e3\u6c7a<\/strong><\/li>\n<\/ol>\n\n\n\n<p>Windows\u56fa\u6709\u306e\u554f\u984c\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if(MSVC)\n    # \u6587\u5b57\u30b3\u30fc\u30c9\u8a2d\u5b9a\n    add_compile_options(\/utf-8)\n\n    # Windows\u56fa\u6709\u306e\u8b66\u544a\u3092\u6291\u5236\n    add_compile_options(\/wd4996 \/wd4819)\n\n    # DLL\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u8a2d\u5b9a\n    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)\nendif()<\/pre>\n\n\n\n<p>Linux\/Unix\u56fa\u6709\u306e\u554f\u984c\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if(UNIX)\n    # Position Independent Code\u306e\u6709\u52b9\u5316\n    set(CMAKE_POSITION_INDEPENDENT_CODE ON)\n\n    # \u5171\u6709\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a\n    set_target_properties(${PROJECT_NAME} PROPERTIES\n        VERSION ${PROJECT_VERSION}\n        SOVERSION ${PROJECT_VERSION_MAJOR}\n    )\nendif()<\/pre>\n\n\n\n<p>\u30a8\u30e9\u30fc\u9632\u6b62\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u524d\u30c1\u30a7\u30c3\u30af\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30c1\u30a7\u30c3\u30af\nfind_program(CCACHE_PROGRAM ccache)\nfind_program(NINJA_PROGRAM ninja)\n\n# \u74b0\u5883\u5909\u6570\u306e\u30c1\u30a7\u30c3\u30af\nif(NOT DEFINED ENV{SOME_REQUIRED_VAR})\n    message(FATAL_ERROR \"SOME_REQUIRED_VAR environment variable is not set\")\nendif()\n\n# \u30b7\u30b9\u30c6\u30e0\u4f9d\u5b58\u95a2\u4fc2\u306e\u30c1\u30a7\u30c3\u30af\ninclude(CheckIncludeFile)\ncheck_include_file(\"sys\/types.h\" HAVE_SYS_TYPES_H)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u8a73\u7d30\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u51fa\u529b\u8a2d\u5b9a\nset(CMAKE_VERBOSE_MAKEFILE ON)\n\n# \u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\nfunction(check_required_components package_name)\n    if(NOT ${package_name}_FOUND)\n        message(FATAL_ERROR \"Required package ${package_name} not found. \n            Please install it or set ${package_name}_ROOT appropriately.\")\n    endif()\nendfunction()<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u5bfe\u51e6\u6cd5\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001CMake\u30d3\u30eb\u30c9\u30d7\u30ed\u30bb\u30b9\u306e\u5b89\u5b9a\u6027\u3068\u4fe1\u983c\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u77e5\u8b58\u3092\u6d3b\u304b\u3057\u305f\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306eCMake\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6a19\u6e96\u306e\u78ba\u7acb\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u4f5c\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d9\u30fc\u30b9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\ncmake_minimum_required(VERSION 3.15)\n\nproject(ProjectTemplate\n    VERSION 1.0.0\n    DESCRIPTION \"Project template for team development\"\n    LANGUAGES CXX\n)\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u306e\u8a2d\u5b9a\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)\n\n# \u30b3\u30f3\u30d1\u30a4\u30e9\u8b66\u544a\u306e\u6a19\u6e96\u8a2d\u5b9a\ninclude(cmake\/CompilerWarnings.cmake)\nset_project_warnings(${PROJECT_NAME})\n\n# \u5171\u901a\u306e\u4f9d\u5b58\u95a2\u4fc2\ninclude(cmake\/Dependencies.cmake)\nfind_project_dependencies()\n\n# \u30d3\u30eb\u30c9\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u6a19\u6e96\u5316\noption(BUILD_TESTS \"Build test cases\" ON)\noption(BUILD_DOCS \"Build documentation\" OFF)\noption(ENABLE_COVERAGE \"Enable coverage reporting\" OFF)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u547d\u540d\u898f\u5247\u306e\u6a19\u6e96\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30bf\u30fc\u30b2\u30c3\u30c8\u547d\u540d\u898f\u5247\nadd_library(${PROJECT_NAME}_core STATIC\n    src\/core\/feature1.cpp\n    src\/core\/feature2.cpp\n)\n\nadd_library(${PROJECT_NAME}_utils STATIC\n    src\/utils\/helper1.cpp\n    src\/utils\/helper2.cpp\n)\n\n# \u5909\u6570\u547d\u540d\u898f\u5247\nset(${PROJECT_NAME}_INCLUDE_DIRS\n    ${PROJECT_SOURCE_DIR}\/include\n    ${PROJECT_SOURCE_DIR}\/src\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3068\u306e\u9023\u643a\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>gitignore\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .gitignore for CMake projects\nbuild\/\nCMakeCache.txt\nCMakeFiles\/\nTesting\/\ninstall\/\n*.cmake\n!CMakeLists.txt\n!cmake\/*.cmake<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831\u306e\u81ea\u52d5\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d0\u30fc\u30b8\u30e7\u30f3\u60c5\u5831\u306e\u751f\u6210\nconfigure_file(\n    ${PROJECT_SOURCE_DIR}\/cmake\/Version.h.in\n    ${PROJECT_BINARY_DIR}\/generated\/Version.h\n)\n\n# Git\u30cf\u30c3\u30b7\u30e5\u306e\u53d6\u5f97\nfind_package(Git QUIET)\nif(GIT_FOUND)\n    execute_process(\n        COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD\n        OUTPUT_VARIABLE GIT_SHA\n        OUTPUT_STRIP_TRAILING_WHITESPACE\n    )\n    set(VERSION_SHA ${GIT_SHA})\nendif()<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">CI\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306e\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>GitLab CI\u306e\u8a2d\u5b9a\u4f8b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .gitlab-ci.yml\nvariables:\n  BUILD_TYPE: Release\n\nstages:\n  - build\n  - test\n  - deploy\n\nbuild:\n  stage: build\n  script:\n    - mkdir -p build\n    - cd build\n    - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE\n    - cmake --build . -j $(nproc)\n  artifacts:\n    paths:\n      - build\/\n\ntest:\n  stage: test\n  script:\n    - cd build\n    - ctest --output-on-failure<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>GitHub Actions\u306e\u8a2d\u5b9a\u4f8b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># .github\/workflows\/cmake.yml\nname: CMake Build\n\non: [push, pull_request]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions\/checkout@v2\n\n    - name: Configure CMake\n      run: cmake -B build -DCMAKE_BUILD_TYPE=Release\n\n    - name: Build\n      run: cmake --build build -j $(nproc)\n\n    - name: Test\n      run: cd build &amp;&amp; ctest --output-on-failure<\/pre>\n\n\n\n<p>\u30c1\u30fc\u30e0\u958b\u767a\u3067\u306e\u52b9\u7387\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3055\u308c\u305fCMake\u69cb\u6210<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># cmake\/modules\/CodeCoverage.cmake\nfunction(enable_coverage target_name)\n    target_compile_options(${target_name} PRIVATE\n        -g \n        -O0\n        --coverage\n    )\n    target_link_options(${target_name} PRIVATE --coverage)\nendfunction()\n\n# cmake\/modules\/Sanitizers.cmake\nfunction(enable_sanitizers target_name)\n    if(CMAKE_CXX_COMPILER_ID MATCHES \"GNU|Clang\")\n        target_compile_options(${target_name} PRIVATE\n            -fsanitize=address,undefined\n        )\n        target_link_options(${target_name} PRIVATE\n            -fsanitize=address,undefined\n        )\n    endif()\nendfunction()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30ea\u30bb\u30c3\u30c8\u8a2d\u5b9a\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ CMakePresets.json\n{\n  \"version\": 3,\n  \"configurePresets\": [\n    {\n      \"name\": \"dev-debug\",\n      \"displayName\": \"Development Debug Config\",\n      \"generator\": \"Ninja\",\n      \"binaryDir\": \"${sourceDir}\/build\/debug\",\n      \"cacheVariables\": {\n        \"CMAKE_BUILD_TYPE\": \"Debug\",\n        \"CMAKE_EXPORT_COMPILE_COMMANDS\": \"ON\"\n      }\n    },\n    {\n      \"name\": \"dev-release\",\n      \"displayName\": \"Development Release Config\",\n      \"generator\": \"Ninja\",\n      \"binaryDir\": \"${sourceDir}\/build\/release\",\n      \"cacheVariables\": {\n        \"CMAKE_BUILD_TYPE\": \"Release\",\n        \"CMAKE_EXPORT_COMPILE_COMMANDS\": \"ON\"\n      }\n    }\n  ]\n}<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u54c1\u8cea\u7ba1\u7406\u306e\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u8a2d\u5b9a\nif(ENABLE_COVERAGE)\n    include(cmake\/modules\/CodeCoverage.cmake)\n    enable_coverage(${PROJECT_NAME})\nendif()\n\n# \u9759\u7684\u89e3\u6790\u306e\u8a2d\u5b9a\nfind_program(CLANG_TIDY clang-tidy)\nif(CLANG_TIDY)\n    set(CMAKE_CXX_CLANG_TIDY \n        ${CLANG_TIDY};\n        -checks=*,-modernize-use-trailing-return-type;\n        -header-filter=${PROJECT_SOURCE_DIR}\/include\n    )\nendif()<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u3067\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u3067\u306e\u958b\u767a\u52b9\u7387\u3068\u54c1\u8cea\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u8df5\u3092\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u958b\u767a\u306b\u9069\u7528\u3059\u308b\u969b\u306e\u6ce8\u610f\u70b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u958b\u767a\u3067\u306e\u6ce8\u610f\u70b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">Windows\u74b0\u5883\u7279\u6709\u306e\u8a2d\u5b9a\u3068\u5bfe\u5fdc<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Visual Studio\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if(MSVC)\n    # \u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9DLL\u5b9f\u884c\u6642\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u8a2d\u5b9a\n    set(CMAKE_MSVC_RUNTIME_LIBRARY \"MultiThreaded$&lt;$&lt;CONFIG:Debug&gt;:Debug&gt;DLL\")\n\n    # \u6587\u5b57\u30b3\u30fc\u30c9\u8a2d\u5b9a\n    add_compile_options(\n        \/utf-8      # UTF-8\u6587\u5b57\u30b3\u30fc\u30c9\u306e\u4f7f\u7528\n        \/W4         # \u8b66\u544a\u30ec\u30d9\u30eb4\n        \/wd4819    # \u6587\u5b57\u30b3\u30fc\u30c9\u8b66\u544a\u306e\u6291\u5236\n    )\n\n    # Windows\u56fa\u6709\u306e\u5b9a\u7fa9\n    target_compile_definitions(${PROJECT_NAME} PRIVATE\n        WIN32_LEAN_AND_MEAN  # Windows.h\u306e\u6700\u5c0f\u5316\n        NOMINMAX            # min\/max \u30de\u30af\u30ed\u306e\u7121\u52b9\u5316\n        _WIN32_WINNT=0x0A00 # Windows 10\u3092\u30bf\u30fc\u30b2\u30c3\u30c8\n    )\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>DLL\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># DLL\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u8a2d\u5b9a\ninclude(GenerateExportHeader)\ngenerate_export_header(${PROJECT_NAME}\n    BASE_NAME ${PROJECT_NAME}\n    EXPORT_MACRO_NAME ${PROJECT_NAME}_API\n    EXPORT_FILE_NAME ${PROJECT_NAME}_Export.h\n)\n\n# \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u8a2d\u5b9a\ninstall(TARGETS ${PROJECT_NAME}\n    RUNTIME DESTINATION bin\n    LIBRARY DESTINATION lib\n    ARCHIVE DESTINATION lib\n)\n\n# DLL\u914d\u7f6e\u306e\u8a2d\u5b9a\nset_target_properties(${PROJECT_NAME} PROPERTIES\n    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}\/bin\n    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}\/lib\n    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}\/lib\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">Linux\u74b0\u5883\u3067\u306e\u6700\u9069\u5316\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30d1\u30a4\u30e9\u30d5\u30e9\u30b0\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if(UNIX AND NOT APPLE)\n    # GCC\/Clang\u56fa\u6709\u306e\u8a2d\u5b9a\n    target_compile_options(${PROJECT_NAME} PRIVATE\n        -Wall\n        -Wextra\n        -Wpedantic\n        -fPIC              # Position Independent Code\n        -march=native      # \u30bf\u30fc\u30b2\u30c3\u30c8CPU\u306e\u6700\u9069\u5316\n    )\n\n    # \u30ea\u30f3\u30ab\u30d5\u30e9\u30b0\u306e\u8a2d\u5b9a\n    target_link_options(${PROJECT_NAME} PRIVATE\n        -Wl,--no-undefined  # \u672a\u5b9a\u7fa9\u30b7\u30f3\u30dc\u30eb\u306e\u30c1\u30a7\u30c3\u30af\n        -Wl,--as-needed     # \u4e0d\u8981\u306a\u4f9d\u5b58\u95a2\u4fc2\u306e\u9664\u5916\n    )\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u5171\u6709\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5171\u6709\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a\nset_target_properties(${PROJECT_NAME} PROPERTIES\n    VERSION ${PROJECT_VERSION}\n    SOVERSION ${PROJECT_VERSION_MAJOR}\n)\n\n# RPATH\u8a2d\u5b9a\nset(CMAKE_INSTALL_RPATH \"$ORIGIN\/..\/lib\")\nset(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)\nset(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">MacOS\u5bfe\u5fdc\u3067\u306e\u7559\u610f\u70b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Framework\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">if(APPLE)\n    # MacOS\u56fa\u6709\u306e\u8a2d\u5b9a\n    set(CMAKE_MACOSX_RPATH ON)\n\n    # Framework\u306e\u691c\u7d22\n    find_library(COCOA_LIBRARY Cocoa)\n    target_link_libraries(${PROJECT_NAME} PRIVATE\n        ${COCOA_LIBRARY}\n    )\n\n    # \u30d0\u30f3\u30c9\u30eb\u8a2d\u5b9a\n    set_target_properties(${PROJECT_NAME} PROPERTIES\n        FRAMEWORK TRUE\n        FRAMEWORK_VERSION A\n        MACOSX_FRAMEWORK_IDENTIFIER com.company.${PROJECT_NAME}\n        MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_SOURCE_DIR}\/cmake\/MacOSXFrameworkInfo.plist.in\n    )\nendif()<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Universal Binary\u5bfe\u5fdc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Apple Silicon &amp; Intel\u5bfe\u5fdc\nif(APPLE)\n    set(CMAKE_OSX_ARCHITECTURES \"x86_64;arm64\")\n\n    # \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u5225\u306e\u6700\u9069\u5316\n    target_compile_options(${PROJECT_NAME} PRIVATE\n        $&lt;$&lt;ARCH:arm64&gt;:-mcpu=apple-m1&gt;\n        $&lt;$&lt;ARCH:x86_64&gt;:-march=native&gt;\n    )\nendif()<\/pre>\n\n\n\n<p>\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u691c\u51fa\u3068\u6761\u4ef6\u5206\u5c90<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u56fa\u6709\u306e\u8a2d\u5b9a\u3092\u95a2\u6570\u5316\nfunction(set_platform_specific_settings target)\n    if(WIN32)\n        target_compile_definitions(${target} PRIVATE\n            PLATFORM_WINDOWS\n        )\n    elseif(APPLE)\n        target_compile_definitions(${target} PRIVATE\n            PLATFORM_MACOS\n        )\n    elseif(UNIX)\n        target_compile_definitions(${target} PRIVATE\n            PLATFORM_LINUX\n        )\n    endif()\nendfunction()\n\n# \u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306e\u4e92\u63db\u6027\u78ba\u4fdd\ntarget_compile_definitions(${PROJECT_NAME} PRIVATE\n    FILESYSTEM_PATH_SEPARATOR=\"$&lt;IF:$&lt;PLATFORM_ID:Windows&gt;,\\\\,\/&gt;\"\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c4\u30fc\u30eb\u30c1\u30a7\u30fc\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># cmake\/toolchain\/windows-msvc.cmake\nset(CMAKE_SYSTEM_NAME Windows)\nset(CMAKE_C_COMPILER cl)\nset(CMAKE_CXX_COMPILER cl)\nset(CMAKE_MT mt)\n\n# cmake\/toolchain\/linux-gcc.cmake\nset(CMAKE_SYSTEM_NAME Linux)\nset(CMAKE_C_COMPILER gcc)\nset(CMAKE_CXX_COMPILER g++)\n\n# cmake\/toolchain\/macos-clang.cmake\nset(CMAKE_SYSTEM_NAME Darwin)\nset(CMAKE_C_COMPILER clang)\nset(CMAKE_CXX_COMPILER clang++)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u9593\u306e\u4e92\u63db\u6027\u30ec\u30a4\u30e4\u30fc<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc\u306e\u5b9f\u88c5\nadd_library(platform_abstraction INTERFACE)\ntarget_include_directories(platform_abstraction INTERFACE\n    ${PROJECT_SOURCE_DIR}\/include\/platform\n)\n\n# \u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u56fa\u6709\u306e\u5b9f\u88c5\nif(WIN32)\n    target_sources(platform_abstraction INTERFACE\n        src\/platform\/windows\/impl.cpp\n    )\nelseif(APPLE)\n    target_sources(platform_abstraction INTERFACE\n        src\/platform\/macos\/impl.cpp\n    )\nelse()\n    target_sources(platform_abstraction INTERFACE\n        src\/platform\/linux\/impl.cpp\n    )\nendif()<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u8a2d\u5b9a\u3068\u6ce8\u610f\u70b9\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001\u7570\u306a\u308b\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u9593\u3067\u306e\u4e92\u63db\u6027\u3092\u78ba\u4fdd\u3057\u3001\u52b9\u7387\u7684\u306a\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u77e5\u8b58\u3092\u5fdc\u7528\u3057\u305f\u767a\u5c55\u7684\u306aCMake\u306e\u4f7f\u7528\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-25\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1aCMake\u30d3\u30eb\u30c9\u306e\u5fdc\u7528\u3068\u767a\u5c55<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u30ab\u30b9\u30bf\u30e0\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4f5c\u6210\u3068\u6d3b\u7528<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u88c5<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u751f\u6210\u7528\u306e\u30ab\u30b9\u30bf\u30e0\u30bf\u30fc\u30b2\u30c3\u30c8\nfind_package(Doxygen REQUIRED)\n\n# Doxygen\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u751f\u6210\nconfigure_file(\n    ${CMAKE_SOURCE_DIR}\/docs\/Doxyfile.in\n    ${CMAKE_BINARY_DIR}\/Doxyfile\n    @ONLY\n)\n\nadd_custom_target(docs\n    COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}\/Doxyfile\n    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}\n    COMMENT \"Generating API documentation with Doxygen\"\n    VERBATIM\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30a4\u30d9\u30f3\u30c8\u306e\u5236\u5fa1<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ea\u30d3\u30eb\u30c9\u30b9\u30c6\u30c3\u30d7\u306e\u8ffd\u52a0\nadd_custom_command(\n    OUTPUT ${CMAKE_BINARY_DIR}\/generated\/config.h\n    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}\/cmake\/scripts\/generate_config.cmake\n    DEPENDS ${CMAKE_SOURCE_DIR}\/config\/config.yaml\n    COMMENT \"Generating configuration header\"\n)\n\n# \u30dd\u30b9\u30c8\u30d3\u30eb\u30c9\u30b9\u30c6\u30c3\u30d7\u306e\u8ffd\u52a0\nadd_custom_command(\n    TARGET ${PROJECT_NAME} POST_BUILD\n    COMMAND ${CMAKE_COMMAND} -E copy_directory\n        ${CMAKE_SOURCE_DIR}\/resources\n        $&lt;TARGET_FILE_DIR:${PROJECT_NAME}&gt;\/resources\n    COMMENT \"Copying resource files to output directory\"\n)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u5916\u90e8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7d71\u5408\u624b\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>FetchContent\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">include(FetchContent)\n\n# Google Test\u306e\u7d71\u5408\nFetchContent_Declare(\n    googletest\n    GIT_REPOSITORY https:\/\/github.com\/google\/googletest.git\n    GIT_TAG release-1.12.1\n)\nFetchContent_MakeAvailable(googletest)\n\n# \u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7d71\u5408\nFetchContent_Declare(\n    json\n    GIT_REPOSITORY https:\/\/github.com\/nlohmann\/json.git\n    GIT_TAG v3.11.2\n)\nFetchContent_MakeAvailable(json)\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u4f7f\u7528\ntarget_link_libraries(${PROJECT_NAME} PRIVATE\n    GTest::gtest\n    GTest::gtest_main\n    nlohmann_json::nlohmann_json\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>ExternalProject\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">include(ExternalProject)\n\n# \u30ab\u30b9\u30bf\u30e0\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30d3\u30eb\u30c9\nExternalProject_Add(custom_lib\n    GIT_REPOSITORY https:\/\/github.com\/example\/custom_lib.git\n    GIT_TAG master\n    CMAKE_ARGS\n        -DCMAKE_INSTALL_PREFIX=&lt;INSTALL_DIR&gt;\n        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}\n    UPDATE_COMMAND \"\"\n)\n\n# \u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a\nadd_dependencies(${PROJECT_NAME} custom_lib)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-28\">\u81ea\u52d5\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u69cb\u7bc9\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">enable_testing()\n\n# GoogleTest\u306e\u8a2d\u5b9a\ninclude(GoogleTest)\n\n# \u30c6\u30b9\u30c8\u306e\u8ffd\u52a0\nadd_executable(unit_tests\n    tests\/test_core.cpp\n    tests\/test_utils.cpp\n)\n\ntarget_link_libraries(unit_tests PRIVATE\n    ${PROJECT_NAME}_lib\n    GTest::gtest\n    GTest::gtest_main\n)\n\n# \u30c6\u30b9\u30c8\u306e\u767b\u9332\ngtest_discover_tests(unit_tests\n    WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}\n    PROPERTIES\n        TIMEOUT 120\n        ENVIRONMENT \"TEST_DATA_DIR=${CMAKE_SOURCE_DIR}\/test_data\"\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u7d71\u5408<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b3\u30fc\u30c9\u30ab\u30d0\u30ec\u30c3\u30b8\u8a2d\u5b9a\nif(ENABLE_COVERAGE)\n    include(CodeCoverage)\n    append_coverage_compiler_flags()\n\n    setup_target_for_coverage_gcovr_xml(\n        NAME coverage\n        EXECUTABLE unit_tests\n        DEPENDENCIES unit_tests\n        BASE_DIRECTORY \"${PROJECT_SOURCE_DIR}\/src\"\n        EXCLUDE \"tests\/*\" \"build\/*\"\n    )\nendif()<\/pre>\n\n\n\n<p>\u767a\u5c55\u7684\u306aCMake\u6a5f\u80fd\u306e\u6d3b\u7528\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30c3\u30b1\u30fc\u30b8\u7ba1\u7406\u3068\u30a8\u30af\u30b9\u30dd\u30fc\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u8a2d\u5b9a\ninclude(CMakePackageConfigHelpers)\n\n# \u30d0\u30fc\u30b8\u30e7\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u751f\u6210\nwrite_basic_package_version_file(\n    \"${CMAKE_BINARY_DIR}\/${PROJECT_NAME}ConfigVersion.cmake\"\n    VERSION ${PROJECT_VERSION}\n    COMPATIBILITY SameMajorVersion\n)\n\n# \u30d1\u30c3\u30b1\u30fc\u30b8\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u751f\u6210\nconfigure_package_config_file(\n    \"${PROJECT_SOURCE_DIR}\/cmake\/${PROJECT_NAME}Config.cmake.in\"\n    \"${CMAKE_BINARY_DIR}\/${PROJECT_NAME}Config.cmake\"\n    INSTALL_DESTINATION lib\/cmake\/${PROJECT_NAME}\n)\n\n# \u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\ninstall(TARGETS ${PROJECT_NAME}\n    EXPORT ${PROJECT_NAME}Targets\n    LIBRARY DESTINATION lib\n    ARCHIVE DESTINATION lib\n    RUNTIME DESTINATION bin\n    INCLUDES DESTINATION include\n)\n\n# \u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ninstall(EXPORT ${PROJECT_NAME}Targets\n    FILE ${PROJECT_NAME}Targets.cmake\n    NAMESPACE ${PROJECT_NAME}::\n    DESTINATION lib\/cmake\/${PROJECT_NAME}\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u306e\u62e1\u5f35<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30ab\u30b9\u30bf\u30e0\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u4f5c\u6210\nfunction(add_formatting_target)\n    find_program(CLANG_FORMAT clang-format)\n\n    file(GLOB_RECURSE ALL_SOURCE_FILES\n        ${PROJECT_SOURCE_DIR}\/src\/*.cpp\n        ${PROJECT_SOURCE_DIR}\/include\/*.h\n    )\n\n    add_custom_target(format\n        COMMAND ${CLANG_FORMAT} -i ${ALL_SOURCE_FILES}\n        COMMENT \"Formatting source files\"\n    )\nendfunction()\n\n# \u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u6700\u9069\u5316\u30aa\u30d7\u30b7\u30e7\u30f3\nfunction(set_optimization_flags target)\n    target_compile_options(${target} PRIVATE\n        $&lt;$&lt;CONFIG:Release&gt;:-O3 -flto -march=native&gt;\n        $&lt;$&lt;CONFIG:Debug&gt;:-O0 -g3 -ggdb&gt;\n    )\nendfunction()<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5fdc\u7528\u7684\u306a\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u3067\u5f37\u529b\u306a\u30d3\u30eb\u30c9\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002CMake\u306e\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u3068\u5b9f\u8df5\u3092\u901a\u3058\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u6700\u9069\u306a\u30d3\u30eb\u30c9\u74b0\u5883\u3092\u5b9f\u73fe\u3057\u3066\u3044\u304f\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-1968","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1968"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1968\/revisions"}],"predecessor-version":[{"id":1976,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1968\/revisions\/1976"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}