{"id":372,"date":"2024-07-22T17:54:38","date_gmt":"2024-07-22T09:54:38","guid":{"rendered":"https:\/\/blog.kishere.cn\/?p=372"},"modified":"2024-11-28T19:51:00","modified_gmt":"2024-11-28T11:51:00","slug":"cmake%e6%80%8e%e4%b9%88%e5%86%99%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/blog.kishere.cn\/?p=372","title":{"rendered":"CMake\u600e\u4e48\u5199\uff1f"},"content":{"rendered":"<h1>CMake\u7684\u6784\u5efa<\/h1>\n<h2>\u914d\u7f6e<\/h2>\n<p>CMake\u9996\u5148\u9700\u8981\u914d\u7f6e\uff0c\u914d\u7f6e\u5305\u62ecC\u7f16\u8bd1\u5668\u3001C++\u7f16\u8bd1\u5668\u3001\u6784\u5efa\u914d\u7f6e\u53c2\u6570\uff08Debug|Release\uff09<\/p>\n<p>\u5728CMakeLists.txt\u76ee\u5f55\u4e0b\u6267\u884cCMake\u5373\u53ef\u914d\u7f6e\uff0c\u5e76\u751f\u6210MakeFile\u3002\u5f53\u7136\u4e5f\u53ef\u4ee5\u5728\u5176\u4ed6\u6587\u4ef6\u5939\u6267\u884ccmake \/path_to_source \u4f7f\u751f\u6210\u7684\u6587\u4ef6\u751f\u6210\u5230\u5176\u4ed6\u6587\u4ef6\u5939\u3002<\/p>\n<h2>CMakeLists.txt<\/h2>\n<pre><code class=\"language-cpp line-numbers\">cmake_minimum_required(VERSION 3.5.0)#\u6700\u4f4eCMake\u7248\u672c\u8981\u6c42\nproject(projectD VERSION 0.1.0 LANGUAGES C CXX)#\u9879\u76ee\u540d\u79f0\n\n# \u542f\u7528C++11\u6807\u51c6\nset(CMAKE_CXX_STANDARD 11)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n# \u663e\u793a\u7f16\u8bd1\u6307\u4ee4\uff0c\u4e0d\u9700\u8981\u770b\u7684\u65f6\u5019OFF\nset(CMAKE_VERBOSE_MAKEFILE OFF)\n\n# \u5b9a\u4e49\u5b8f\uff0c\u4e0d\u9700\u8981\u7684\u6ce8\u6389\uff0c\u4e0d\u8981\u6539\u6210OFF\uff0c\u540e\u9762\u53ea\u5224\u65ad\u662f\u5426\u5b9a\u4e49\nset(DEF ON)\n# \u76f4\u63a5\u5b9a\u4e49\u7f16\u8bd1\u53c2\u6570\uff0c\u8fd9\u4e2a\u4f1a\u76f4\u63a5\u52a0\u5230\u7f16\u8bd1\u547d\u4ee4\u540e\nadd_definitions(-DSPDLOG_PRINTF_STYLE -DCMTIHAL_EXPORTS)\n\n# \u6839\u636eCMAKE_BUILD_TYPE\u6765\u6dfb\u52a0\u4e0d\u540c\u7684\u7f16\u8bd1\u53c2\u6570\u3001\u547d\u4ee4\nif(CMAKE_BUILD_TYPE STREQUAL \"Debug\")\n    add_definitions(-D_DEBUG)\n    set(CONFIG_DIR \"Debug\")\nelse()\n    set(CONFIG_DIR \"Release\")\n    #\u5220\u9664\u8c03\u8bd5\u4fe1\u606f\uff0c\u8fd9\u6bb5\u4e0d\u80fd\u653eDebug\u91cc\uff0c\u4e0d\u7136\u8c03\u8bd5\u4e0d\u4e86\n    add_custom_command(TARGET <span class=\"katex math inline\">{TARGET_NAME} POST_BUILD\n        COMMAND<\/span>{CMAKE_STRIP} <span class=\"katex math inline\">{DESTDIR}\/lib<\/span>{TARGET_NAME}.so\n    )\nendif()\n\nif(DEFINED DEF)\n    #\u6253\u5370\u914d\u7f6e\u8c03\u8bd5\u4fe1\u606f\uff0c\u4f1a\u5728\u6267\u884ccmake\u547d\u4ee4\u65f6\u6253\u5370\n    message(\"Configuring debug version...\")\nendif()\n\n\n# \u6839\u636e\u5b8f\u6765\u8bbe\u7f6e\u76ee\u6807\u540d\u79f0\nif(DEFINED DEF)\n    message(\"USED FOR DEF version...\")\n    set(TARGET_NAME \"DEF\")#\u8fd9\u5c06\u4fee\u6539\u6784\u5efa\u7684\u76ee\u6807\u540d\u79f0\nelseif(DEFINED USED_FOR8X7)\n    message(\"USED FOR NOT DEF version...\")\n    set(TARGET_NAME \"NOT DEF\")\nelse()\n    message(\"USED FOR DIF version...\")\n    set(TARGET_NAME \"DIF\")\nendif()\n\n#\u8bbe\u7f6eDESTDIR\u53d8\u91cf\uff0c\u540e\u7eed\u7528\u4e8e\u751f\u6210\u7684\u76ee\u6807\u8def\u5f84\nset(DESTDIR <span class=\"katex math inline\">{CMAKE_CURRENT_SOURCE_DIR}\/..\/lib\/<\/span>{CONFIG_DIR})\n\n# \u5305\u542b\u76ee\u5f55\ninclude_directories(\n    <span class=\"katex math inline\">{CMAKE_CURRENT_SOURCE_DIR}\/..\/include<\/span>{CMAKE_CURRENT_SOURCE_DIR}\/..\/common\n    <span class=\"katex math inline\">{CMAKE_CURRENT_SOURCE_DIR}\/..<\/span>{CMAKE_CURRENT_SOURCE_DIR}\/\n)\n\n# \u6e90\u6587\u4ef6\nset(SOURCES\n    utils\/utils.cpp\n    InitHalLibrary.cpp\n    libmain.cpp\n)\n\n# \u5934\u6587\u4ef6\nset(HEADERS\n    utils\/utils.h\n    InitHalLibrary.h\n    version.h\n)\n\n# \u6dfb\u52a0\u76ee\u6807\uff0cSHARED\u8868\u793a\u751f\u6210\u52a8\u6001\u5e93\uff0cSTATIC\u8868\u793a\u9759\u6001\u5e93\uff0cadd_executable\u7528\u4e8e\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6\nadd_library(<span class=\"katex math inline\">{TARGET_NAME} SHARED<\/span>{SOURCES} <span class=\"katex math inline\">{HEADERS})\n# \u589e\u52a0\u81ea\u5b9a\u4e49\u547d\u4ee4\uff0cPOST_BUILD\u6307\u5728\u6784\u5efa\u540e\u6267\u884c\u7684\u811a\u672c\uff0c\u540e\u8ddf\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4\nadd_custom_command(TARGET<\/span>{TARGET_NAME} POST_BUILD\n    COMMAND bash <span class=\"katex math inline\">{CMAKE_CURRENT_SOURCE_DIR}\/postlink.sh<\/span>{DESTDIR}\/lib<span class=\"katex math inline\">{TARGET_NAME}.so\n)\n\n# \u76ee\u6807\u5c5e\u6027\nset_target_properties(<\/span>{TARGET_NAME} PROPERTIES\n    RUNTIME_OUTPUT_DIRECTORY <span class=\"katex math inline\">{DESTDIR}\n    LIBRARY_OUTPUT_DIRECTORY<\/span>{DESTDIR}\n)\n\n# \u7f16\u8bd1\u9009\u9879\ntarget_compile_options(${TARGET_NAME} PRIVATE\n    -Wno-unused-function\n    -Wno-unused-parameter\n)\n<\/code><\/pre>\n<h2>\u7f16\u8bd1\u76ee\u6807<\/h2>\n<p>\u901a\u8fc7\u4e0b\u9762\u7684\u547d\u4ee4\u6765\u542f\u52a8\u7f16\u8bd1<\/p>\n<pre><code class=\"language-bash line-numbers\">cmake --build \/path_to_builded --config Debug --target all -- -j 2\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>CMake\u7684\u6784\u5efa \u914d\u7f6e CMake\u9996\u5148\u9700\u8981\u914d\u7f6e\uff0c\u914d\u7f6e\u5305\u62ecC\u7f16\u8bd1\u5668\u3001C++\u7f16\u8bd1\u5668\u3001\u6784\u5efa\u914d\u7f6e\u53c2\u6570\uff08Debug|Release\uff09 \u5728CMakeLists.txt\u76ee\u5f55\u4e0b\u6267\u884cCMake\u5373\u53ef\u914d\u7f6e\uff0c\u5e76\u751f\u6210MakeFile\u3002\u5f53\u7136\u4e5f\u53ef\u4ee5\u5728\u5176\u4ed6\u6587\u4ef6\u5939\u6267\u884ccmake \/path_to_source \u4f7f\u751f\u6210\u7684\u6587\u4ef6\u751f\u6210\u5230\u5176\u4ed6\u6587\u4ef6\u5939\u3002 CMakeLists.txt cmake_minimum_required(VERSION 3.5.0)#\u6700\u4f4eCMake\u7248\u672c\u8981\u6c42 project(projectD VERSION 0.1.0 LANGUAGES C CXX)#\u9879\u76ee\u540d\u79f0 # \u542f\u7528C++11\u6807\u51c6 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # \u663e\u793a\u7f16\u8bd1\u6307\u4ee4\uff0c\u4e0d\u9700\u8981\u770b\u7684\u65f6\u5019OFF set(CMAKE_VERBOSE_MAKEFILE OFF) # \u5b9a\u4e49\u5b8f\uff0c\u4e0d\u9700\u8981\u7684\u6ce8\u6389\uff0c\u4e0d\u8981\u6539\u6210OFF\uff0c\u540e\u9762\u53ea\u5224\u65ad\u662f\u5426\u5b9a\u4e49 set(DEF ON) # \u76f4\u63a5\u5b9a\u4e49\u7f16\u8bd1\u53c2\u6570\uff0c\u8fd9\u4e2a\u4f1a\u76f4\u63a5\u52a0\u5230\u7f16\u8bd1\u547d\u4ee4\u540e add_definitions(-DSPDLOG_PRINTF_STYLE -DCMTIHAL_EXPORTS) # \u6839\u636eCMAKE_BUILD_TYPE\u6765\u6dfb\u52a0\u4e0d\u540c\u7684\u7f16\u8bd1\u53c2\u6570\u3001\u547d\u4ee4 if(CMAKE_BUILD_TYPE STREQUAL &#8220;Debug&#8221;) add_definitions(-D_DEBUG) set(CONFIG_DIR &#8220;Debug&#8221;) else() set(CONFIG_DIR &#8220;Release&#8221;) #\u5220\u9664\u8c03\u8bd5\u4fe1\u606f\uff0c\u8fd9\u6bb5\u4e0d\u80fd\u653eDebug\u91cc\uff0c\u4e0d\u7136\u8c03\u8bd5\u4e0d\u4e86 add_custom_command(TARGET {TARGET_NAME} POST_BUILD COMMAND{CMAKE_STRIP} {DESTDIR}\/lib{TARGET_NAME}.so ) endif() if(DEFINED DEF) #\u6253\u5370\u914d\u7f6e\u8c03\u8bd5\u4fe1\u606f\uff0c\u4f1a\u5728\u6267\u884ccmake\u547d\u4ee4\u65f6\u6253\u5370 message(&#8220;Configuring debug version&#8230;&#8221;) endif() # \u6839\u636e\u5b8f\u6765\u8bbe\u7f6e\u76ee\u6807\u540d\u79f0 if(DEFINED DEF) message(&#8220;USED FOR DEF version&#8230;&#8221;) set(TARGET_NAME &#8220;DEF&#8221;)#\u8fd9\u5c06\u4fee\u6539\u6784\u5efa\u7684\u76ee\u6807\u540d\u79f0 elseif(DEFINED USED_FOR8X7) message(&#8220;USED FOR NOT DEF version&#8230;&#8221;) set(TARGET_NAME &#8220;NOT DEF&#8221;) else() message(&#8220;USED FOR DIF version&#8230;&#8221;) set(TARGET_NAME &#8220;DIF&#8221;) endif() #\u8bbe\u7f6eDESTDIR\u53d8\u91cf\uff0c\u540e\u7eed\u7528\u4e8e\u751f\u6210\u7684\u76ee\u6807\u8def\u5f84 set(DESTDIR {CMAKE_CURRENT_SOURCE_DIR}\/..\/lib\/{CONFIG_DIR}) # \u5305\u542b\u76ee\u5f55 include_directories( {CMAKE_CURRENT_SOURCE_DIR}\/..\/include{CMAKE_CURRENT_SOURCE_DIR}\/..\/common {CMAKE_CURRENT_SOURCE_DIR}\/..{CMAKE_CURRENT_SOURCE_DIR}\/ ) # \u6e90\u6587\u4ef6 set(SOURCES utils\/utils.cpp InitHalLibrary.cpp libmain.cpp ) # \u5934\u6587\u4ef6 set(HEADERS utils\/utils.h InitHalLibrary.h version.h ) # \u6dfb\u52a0\u76ee\u6807\uff0cSHARED\u8868\u793a\u751f\u6210\u52a8\u6001\u5e93\uff0cSTATIC\u8868\u793a\u9759\u6001\u5e93\uff0cadd_executable\u7528\u4e8e\u751f\u6210\u53ef\u6267\u884c\u6587\u4ef6 add_library({TARGET_NAME} SHARED{SOURCES} {HEADERS}) # \u589e\u52a0\u81ea\u5b9a\u4e49\u547d\u4ee4\uff0cPOST_BUILD\u6307\u5728\u6784\u5efa\u540e\u6267\u884c\u7684\u811a\u672c\uff0c\u540e\u8ddf\u9700\u8981\u6267\u884c\u7684\u547d\u4ee4 add_custom_command(TARGET{TARGET_NAME} POST_BUILD COMMAND bash {CMAKE_CURRENT_SOURCE_DIR}\/postlink.sh{DESTDIR}\/lib{TARGET_NAME}.so ) # \u76ee\u6807\u5c5e\u6027 set_target_properties({TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY {DESTDIR} LIBRARY_OUTPUT_DIRECTORY{DESTDIR} ) # \u7f16\u8bd1\u9009\u9879 target_compile_options(${TARGET_NAME}&#8230;<\/p>\n","protected":false},"author":1,"featured_media":375,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/posts\/372"}],"collection":[{"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=372"}],"version-history":[{"count":3,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/posts\/372\/revisions"}],"predecessor-version":[{"id":413,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/posts\/372\/revisions\/413"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=\/wp\/v2\/media\/375"}],"wp:attachment":[{"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kishere.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}