{"id":465,"date":"2020-01-07T15:44:36","date_gmt":"2020-01-07T07:44:36","guid":{"rendered":"https:\/\/www.caiqinyi.cn\/?p=465"},"modified":"2021-04-24T15:26:13","modified_gmt":"2021-04-24T07:26:13","slug":"cmake_ext","status":"publish","type":"post","link":"https:\/\/www.caiqinyi.cn\/index.php\/2020\/01\/07\/cmake_ext\/","title":{"rendered":"CMake\u6dfb\u52a0\u7b2c\u4e09\u65b9\u5e93\u5c0f\u7ed3"},"content":{"rendered":"<p>\u60f3\u8981\u901a\u8fc7CMake\u5f15\u5165OpenMesh\u548cAssimp, \u4f46\u8fd8\u662f\u6298\u817e\u4e86\u5dee\u4e0d\u591a\u4e00\u5929, \u7ec8\u4e8e\u641e\u6382\u4e86, \u7279\u6b64\u603b\u7ed3\u4e00\u4e0b\u4e0b~<\/p>\n<p><!--more--><\/p>\n<p>\u4e00\u822c\u6765\u8bf4, CMake\u5f15\u5165\u7b2c\u4e09\u65b9\u5e93\u6709\u4e24\u79cd\u65b9\u5f0f, \u5206\u522b\u662ffind_package\u65b9\u5f0f\u548clink_directories\u65b9\u5f0f. \u63a5\u4e0b\u6765\u4ee5\u5f15\u5165OpenMesh\u4e3a\u4f8b\u8fdb\u884c\u4ecb\u7ecd.<\/p>\n<p>1. find_package\u65b9\u5f0f<br \/>\n\u8fd9\u4e00\u5757\u5751\u6bd4\u8f83\u591a, \u9996\u5148\u81ea\u7136\u662ffind_package\u627e\u4e0d\u5230FindOpenMesh.cmake. \u9700\u8981\u5148\u624b\u52a8\u628a\u5305\u542bFindOpenMesh.cmake\u7684\u8def\u5f84\u6dfb\u52a0\u5230CMAKE_MODULE_PATH\u4e2d\u624d\u884c, \u5373<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"C++\" data-enlighter-theme=\"monokai\">\r\nlist(APPEND CMAKE_MODULE_PATH \"D:\\\\Library\\\\OpenMesh\\\\OpenMesh-7.1\\\\OpenMesh-7.1\\\\cmake\")\r\nfind_package(OpenMesh REQUIRED)\r\n<\/pre>\n<p>\u6b64\u5904\u4e4b\u6240\u4ee5\u91c7\u7528\u5199\u6b7bOpenMesh\u8def\u5f84\u8fd9\u6837\u4e00\u79cd\u4e0d\u5927\u4f18\u96c5\u7684\u65b9\u5f0f, \u662f\u56e0\u4e3a\u91c7\u7528$ENV{OPENMESH_DIR}\u7684\u65b9\u5f0f\u65f6\u53d1\u73b0$ENV{OPENMESH_DIR}\u4e00\u76f4\u4e3a\u7a7a, \u660e\u660e\u81ea\u5df1\u5df2\u7ecf\u5728\u73af\u5883\u53d8\u91cf\u4e2d\u8bbe\u7f6e\u4e86\u2026\u2026<\/p>\n<p>\u5f53\u627e\u5230FindOpenMesh.cmake\u4ee5\u540e\u53c8\u53d1\u73b0FIND_LIBRARY\u8fd9\u4e1c\u897f\u627e\u4e0d\u5230\u4e86\u2026\u2026 \u8fd9\u65f6\u5019\u53c8\u5f97\u52a8\u624b\u6539OpenMesh\u91cc\u7684FindOpenMesh.cmake\u6587\u4ef6, \u5c06\u5305\u542blib\u7684\u8def\u5f84\u6dfb\u52a0\u5230SEARCH_PATHS\u4e2d\u53bb, \u5373<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"C++\" data-enlighter-theme=\"monokai\">\r\nSET (SEARCH_PATHS \r\n    \/usr\/local\/\r\n    \/usr\/\r\n    \"${OPENMESH_LIBRARY_DIR}\"\r\n    \"D:\\\\Library\\\\OpenMesh\\\\OpenMesh-7.1\\\\OpenMesh-7.1\\\\build\\\\Build\\\\lib\"\r\n    \"D:\\\\Library\\\\OpenMesh\\\\OpenMesh-7.1\\\\OpenMesh-7.1\\\\src\"\r\n  )\r\n<\/pre>\n<p>\u96be\u602a\u5e08\u5144\u5410\u69fdOpenMesh\u7684CMake\u5199\u5f97\u70c2\u2026\u2026 \u8fd8\u662f\u5f88\u6709\u9053\u7406\u7684\u2026\u2026 \u5f53\u4e0a\u8ff0\u5de5\u4f5c\u5b8c\u6210\u4ee5\u540e, \u5c31\u5269\u94fe\u63a5\u5e93\u7684\u95ee\u9898\u5566~ \u76f4\u63a5<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"C++\" data-enlighter-theme=\"monokai\">\r\ntarget_link_libraries(clothsim\r\n    CGL ${CGL_LIBRARIES}\r\n    nanogui ${NANOGUI_EXTRA_LIBS}\r\n    ${FREETYPE_LIBRARIES}\r\n    ${CMAKE_THREADS_INIT}\r\n\tdebug OpenMeshCored\r\n\toptimized OpenMeshCore\r\n\tdebug OpenMeshToolsd\r\n\toptimized OpenMeshTools\r\n\tassimp\r\n)\r\n<\/pre>\n<p>\u8bb0\u5f97\u9700\u8981\u7528debug\u548coptimized\u524d\u7f00\u53bb\u533a\u5206Debug\u548cRelease\u7684lib, \u800cdebug\/optimized\u540e\u9762\u8ddf\u7684\u4e00\u822c\u662flib\u7684\u540d\u5b57, \u5f53\u7136\u4e5f\u6709\u4f8b\u5916, \u7b49\u4e0b\u4f1a\u8bf4~<\/p>\n<p>2. link_directories\u65b9\u5f0f<br \/>\n\u53ef\u4ee5\u770b\u51fa, \u4e0a\u8ff0\u65b9\u5f0f\u8fd8\u662f\u6709\u4e9b\u7e41\u7410\u7684, \u800c\u4e14\u4e0d\u5927\u4f18\u96c5, \u56e0\u6b64\u73b0\u5728\u6211\u91c7\u7528\u4e86\u8fd9\u79cd\u65b9\u5f0f. \u76f4\u63a5\u628a\u7b2c\u4e09\u65b9\u5e93\u653e\u5230\u5de5\u7a0b\u76ee\u5f55\u4e0b(\u53ef\u4ee5\u65b0\u5efa\u4e2aext\u7b49\u6587\u4ef6\u5939\u4e13\u95e8\u653e\u7f6e\u7b2c\u4e09\u65b9\u5e93). \u53ea\u8981\u7b2c\u4e09\u65b9\u5e93\u5bb9\u91cf\u4e0d\u5927, \u8fd9\u79cd\u65b9\u5f0f\u8fd8\u662f\u5f88\u65b9\u4fbf\u7684, \u6bd5\u7adf\u79fb\u690d\u6027\u4e5f\u597d, \u628a\u5de5\u7a0b\u7ed9\u522b\u4eba\u65f6\u522b\u4eba\u4e5f\u4e0d\u9700\u8981\u518d\u624b\u52a8\u6539CMakeLists.txt. \u5f53\u7136\u5f53\u7b2c\u4e09\u65b9\u5e93\u5bb9\u91cf\u8f83\u5927\u7684\u65f6\u5019\u6700\u597d\u5c31\u522b\u7528\u8fd9\u79cd\u65b9\u5f0f\u4e86, \u4e0d\u7136\u4f1a\u4f7f\u5f97\u81ea\u5df1\u7684\u5de5\u7a0b\u663e\u5f97\u5f88\u81c3\u80bf. \u76f4\u63a5\u4e0a\u56db\u6b65\u66f2\u5c31\u597d\u4e86~<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"C++\" data-enlighter-theme=\"monokai\">\r\n#-------------------------------------------------------------------------------\r\n# First and second steps\r\n#-------------------------------------------------------------------------------\r\n# assimp\r\ninclude_directories(..\/ext\/assimp\/include)\r\nlink_directories(..\/ext\/assimp\/lib)\r\n\r\n# OpenMesh\r\ninclude_directories(..\/ext\/OpenMesh\/include)\r\nlink_directories(..\/ext\/OpenMesh\/lib)\r\n\r\n#-------------------------------------------------------------------------------\r\n# Third steps\r\n#-------------------------------------------------------------------------------\r\nadd_executable(clothsim ${CLOTHSIM_VIEWER_SOURCE} ${BVH_VIEWER_SOURCE})\r\n\r\n#-------------------------------------------------------------------------------\r\n# Fourth steps\r\n#-------------------------------------------------------------------------------\r\ntarget_link_libraries(clothsim\r\n    CGL ${CGL_LIBRARIES}\r\n    nanogui ${NANOGUI_EXTRA_LIBS}\r\n    ${FREETYPE_LIBRARIES}\r\n    ${CMAKE_THREADS_INIT}\r\n\tdebug OpenMeshCored\r\n\toptimized OpenMeshCore\r\n\tdebug OpenMeshToolsd\r\n\toptimized OpenMeshTools\r\n\tassimp\r\n)\r\n<\/pre>\n<p>\u9700\u8981\u6ce8\u610f\u7684\u662f, target_link_libraries\u4e2d\u7684assimp\u5e76\u672a\u533a\u5206Debug\u548cRelease\u7684lib, \u800c\u4e14\u540e\u9762\u8ddf\u7684&#8221;assimp&#8221;\u4e5f\u5e76\u4e0d\u662f\u6240\u7528lib\u7684\u540d\u5b57(\u5b9e\u9645\u4e0a\u7528\u7684\u540d\u5b57\u662fassimp-vc141-mtd\u548cassimp-vc141-mt), \u8fd9\u4e5f\u662f\u6682\u65f6\u6ca1\u60f3\u901a\u7684\u4e00\u70b9\u989d\u2026\u2026 \u53cd\u6b63, \u5148\u4e0d\u7ba1\u565c, \u53cd\u6b63\u5bfc\u5165\u6210\u529f\u4e86!<\/p>\n<p>\u518d\u8bb0\u5f55\u4e0b\u4e24\u4e2a\u5c0ftips:<br \/>\na) \u6dfb\u52a0\u9884\u5b9a\u4e49\u5b8f,<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"C++\" data-enlighter-theme=\"monokai\">\r\nadd_definitions(-D _USE_MATH_DEFINES)\r\n<\/pre>\n<p>b) \u5728VS\u4e2d\u6dfb\u52a0\u6587\u4ef6\u7b5b\u9009\u5668,<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"C++\" data-enlighter-theme=\"monokai\">\r\nset(BVH_VIEWER_SOURCE\r\n\t# BVH\r\n\tBVH\/BVHData.cpp\r\n\tBVH\/HBone.cpp\r\n\tBVH\/HMatrix.cpp\r\n\tBVH\/HPoseAdj.cpp\r\n)\r\n\r\nsource_group(\"BVH\" FILES ${BVH_VIEWER_SOURCE}) \r\n\r\nadd_executable(clothsim ${CLOTHSIM_VIEWER_SOURCE} ${BVH_VIEWER_SOURCE})\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u60f3\u8981\u901a\u8fc7CMake\u5f15\u5165OpenMesh\u548cAssimp, \u4f46\u8fd8\u662f\u6298\u817e\u4e86\u5dee\u4e0d\u591a\u4e00\u5929, \u7ec8\u4e8e\u641e\u6382\u4e86, \u7279\u6b64\u603b\u7ed3\u4e00\u4e0b\u4e0b &hellip; <a href=\"https:\/\/www.caiqinyi.cn\/index.php\/2020\/01\/07\/cmake_ext\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">CMake\u6dfb\u52a0\u7b2c\u4e09\u65b9\u5e93\u5c0f\u7ed3<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"_links":{"self":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts\/465"}],"collection":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/comments?post=465"}],"version-history":[{"count":6,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts\/465\/revisions"}],"predecessor-version":[{"id":717,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/posts\/465\/revisions\/717"}],"wp:attachment":[{"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/media?parent=465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/categories?post=465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.caiqinyi.cn\/index.php\/wp-json\/wp\/v2\/tags?post=465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}