使用CMAKE与Visual Studio BuildTools 2017;无法访问UWP libs

Using CMAKE with visual studio buildtools 2017 ; unable to access UWP libs

本文关键字:访问 UWP libs 2017 CMAKE Visual Studio BuildTools 使用      更新时间:2023-10-16

我正在尝试使用Visual Studio BuildTools 2017使用Cmake;无论旗帜的组合或否则,我都无法进行工作汇编。(我也尝试了BuildTools 2015)我无法访问UWP Libs,特别是platform.winmd

我总是以

结尾
fatal error C1107: could not find assembly 'platform.winmd': please specify the assembly search path using /AI or by setting the LIBPATH environment variable [C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildwinsearch.vcxproj]

我的cmakelists.txt看起来像:

cmake_minimum_required(VERSION 3.7)
set(lib "winsearch")
file(GLOB SOURCE_FILES "src/module/winSearch/*.cpp" "src/module/winSearch/*.h")
add_library( ${lib} SHARED ${SOURCE_FILES})
set( MSVS15_COMPILE_FLAGS "/ZW" )
SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MSVS15_COMPILE_FLAGS}" )
set_target_properties(${lib} PROPERTIES PREFIX "" SUFFIX ".node")
target_include_directories(${lib} PRIVATE ${CMAKE_JS_INC})
target_link_libraries(${lib} ${CMAKE_JS_LIB})

我删除了除空白功能和调用 #include <collection.h>

的调用外,我已经删除了所有源

cmake 被称为:

cmake.exe "C:UsersehillerDevsrcgithub.comerichilleruwp-js-test" --no-warn-unused-cli -G"Visual Studio 15 2017 Win64" -DCMAKE_JS_VERSION="3.4.0" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuild" -DCMAKE_JS_INC="C:Usersehiller.cmake-jselectron-x64v1.4.5src;C:Usersehiller.cmake-jselectron-x64v1.4.5depsv8include;C:Usersehiller.cmake-jselectron-x64v1.4.5depsuvinclude;C:UsersehillerDevsrcgithub.comerichilleruwp-js-testnode_modulesnan" -DNODE_RUNTIME="electron" -DNODE_RUNTIMEVERSION="1.4.5" -DNODE_ARCH="x64" -DCMAKE_JS_LIB="C:Usersehiller.cmake-jselectron-x64v1.4.5x64node.lib"

执行时的完整输出为:

info TOOL Using Visual Studio 15 2017 Win64 generator, as specified from commandline.
info CMD CLEAN
info RUN C:UsersehillerAppDataLocalomegasystemcmakebincmake.exe -E remove_directory "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuild"
> uwp-js-test@0.0.1 compile C:UsersehillerDevsrcgithub.comerichilleruwp-js-test
> cmake-js build -c "C:UsersehillerAppDataLocalomegasystemcmakebincmake.exe" -G "Visual Studio 15 2017 Win64"
info TOOL Using Visual Studio 15 2017 Win64 generator, as specified from commandline.
info CMD CONFIGURE
info RUN C:UsersehillerAppDataLocalomegasystemcmakebincmake.exe "C:UsersehillerDevsrcgithub.comerichilleruwp-js-test" --no-warn-unused-cli -G"Visual Studio 15 2017 Win64" -DCMAKE_JS_VERSION="3.4.0" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuild" -DCMAKE_JS_INC="C:Usersehiller.cmake-jselectron-x64v1.4.5src;C:Usersehiller.cmake-jselectron-x64v1.4.5depsv8include;C:Usersehiller.cmake-jselectron-x64v1.4.5depsuvinclude;C:UsersehillerDevsrcgithub.comerichilleruwp-js-testnode_modulesnan" -DNODE_RUNTIME="electron" -DNODE_RUNTIMEVERSION="1.4.5" -DNODE_ARCH="x64" -DCMAKE_JS_LIB="C:Usersehiller.cmake-jselectron-x64v1.4.5x64node.lib"
Not searching for unused variables given on the command line.
-- The C compiler identification is MSVC 19.10.24930.0
-- The CXX compiler identification is MSVC 19.10.24930.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.10.24930/bin/HostX86/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.10.24930/bin/HostX86/x64/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.10.24930/bin/HostX86/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.10.24930/bin/HostX86/x64/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/ehiller/Dev/src/github.com/erichiller/uwp-js-test/build
info CMD BUILD
info RUN C:UsersehillerAppDataLocalomegasystemcmakebincmake.exe --build "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuild" --config Release
Microsoft (R) Build Engine version 15.1.545.13942
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 2/18/2017 9:27:58 PM.
Project "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildALL_BUILD.vcxproj" on node 1 (default targets).
Project "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildALL_BUILD.vcxproj" (1) is building "C:UsersehillerDevsrcgithub.comerichilleruwp-js-te stbuildZERO_CHECK.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
  Creating directory "x64ReleaseZERO_CHECK".
  Creating directory "x64ReleaseZERO_CHECKZERO_CHECK.tlog".
InitializeBuildStatus:
  Creating "x64ReleaseZERO_CHECKZERO_CHECK.tlogunsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
  Checking Build System
  CMake does not need to re-run because C:/Users/ehiller/Dev/src/github.com/erichiller/uwp-js-test/build/CMakeFiles/generate.stamp is up-to-date.
FinalizeBuildStatus:
  Deleting file "x64ReleaseZERO_CHECKZERO_CHECK.tlogunsuccessfulbuild".
  Touching "x64ReleaseZERO_CHECKZERO_CHECK.tlogZERO_CHECK.lastbuildstate".
Done Building Project "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildZERO_CHECK.vcxproj" (default targets).
Project "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildALL_BUILD.vcxproj" (1) is building "C:UsersehillerDevsrcgithub.comerichilleruwp-js-te stbuildwinsearch.vcxproj" (3) on node 1 (default targets).
PrepareForBuild:
  Creating directory "winsearch.dirRelease".
  Creating directory "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildRelease".
  Creating directory "winsearch.dirReleasewinsearch.tlog".
InitializeBuildStatus:
  Creating "winsearch.dirReleasewinsearch.tlogunsuccessfulbuild" because "AlwaysCreate" was specified.
CustomBuild:
  Building Custom Rule C:/Users/ehiller/Dev/src/github.com/erichiller/uwp-js-test/CMakeLists.txt
  CMake does not need to re-run because C:/Users/ehiller/Dev/src/github.com/erichiller/uwp-js-test/build/CMakeFiles/generate.stamp is up-to-date.
ClCompile:
  C:Program Files (x86)Microsoft Visual Studio2017BuildToolsVCToolsMSVC14.10.24930binHostX86x64CL.exe /c /I"C:Usersehiller.cmake-jselectron-x64v1.4.5
  src" /I"C:Usersehiller.cmake-jselectron-x64v1.4.5depsv8include" /I"C:Usersehiller.cmake-jselectron-x64v1.4.5depsuvinclude" /I"C:UsersehillerDev
  srcgithub.comerichilleruwp-js-testnode_modulesnan" /ZW /nologo /W3 /WX- /diagnostics:classic /O2 /Ob2 /D WIN32 /D _WINDOWS /D NDEBUG /D "CMAKE_INTDIR="Release
  "" /D winsearch_EXPORTS /D _WINDLL /D _MBCS /Gm- /EHsc /MD /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /GR /Fo"winsearch.dirRelease\" /Fd"winsearch.dirR
  eleasevc141.pdb" /Gd /TP /errorReport:queue "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testsrcmodulewinSearchwinSearch.cpp"
  winSearch.cpp
C:UsersehillerDevsrcgithub.comerichilleruwp-js-testsrcmodulewinSearchwinSearch.cpp : fatal error C1107: could not find assembly 'platform.winmd': please sp ecify the assembly search path using /AI or by setting the LIBPATH environment variable [C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildwinsearch.vc xproj]
Done Building Project "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildwinsearch.vcxproj" (default targets) -- FAILED.
Done Building Project "C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildALL_BUILD.vcxproj" (default targets) -- FAILED.

Build FAILED.
"C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildALL_BUILD.vcxproj" (default target) (1) ->
"C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildwinsearch.vcxproj" (default target) (3) ->
(ClCompile target) ->
  C:UsersehillerDevsrcgithub.comerichilleruwp-js-testsrcmodulewinSearchwinSearch.cpp : fatal error C1107: could not find assembly 'platform.winmd': please
specify the assembly search path using /AI or by setting the LIBPATH environment variable [C:UsersehillerDevsrcgithub.comerichilleruwp-js-testbuildwinsearch. vcxproj]
    0 Warning(s)
    1 Error(s)
Time Elapsed 00:00:00.49

我有

  • C:Program Files (x86)Windows Kits10UnionMetadataWindows.winmd
  • C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.10.24930/lib/x86/store/references/platform.winmd

我尝试将它们包括为

的库
target_link_libraries( ${lib} "C:/Program Files (x86)/Windows Kits/10/UnionMetadata/Windows.winmd" )
TARGET_LINK_LIBRARIES(${lib} "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.10.24930/lib/x86/store/references/platform.winmd")

,但它们都没有任何作用。

也不设置CMAKE_SYSTEM_NAME

set( CMAKE_SYSTEM_NAME WindowsStore )

CMAKE_SYSTEM_VERSION

set( CMAKE_SYSTEM_VERSION 10.0 )

我什至尝试将库设置为我可以在sdk.bat文件中找到的每个目录:

set( sd "C:/Program Files (x86)/Windows Kits/10/" )
set( WindowsSDKVersion "10.0.14393.0" )
target_link_libraries( ${lib} "${sd}bin")
target_link_libraries( ${lib} "${sd}UnionMetadata")
target_link_libraries( ${lib} "${sd}References")
target_link_libraries( ${lib} "${sd}bin")
target_link_libraries( ${lib} "{sd}bin" )
target_link_libraries( ${lib} "${sd}UnionMetadata" )
target_link_libraries( ${lib} "${sd}References" )
target_link_libraries( ${lib} "${sd}lib/${WindowsSDKLibVersion}/um/${NODE_ARCH}" )

target_link_libraries( ${lib} "${sd}include/${WindowsSDKVersion}/shared/" )
target_link_libraries( ${lib} "${sd}include/${WindowsSDKVersion}/um/" )
target_link_libraries( ${lib} "${sd}include/${WindowsSDKVersion}/winrt/" )
target_link_libraries( ${lib} "${sd}References/CommonConfiguration/Neutral" )

但不是。

所以我现在正处于那一刻,我敢肯定我错过了一些明显的东西。因此,我希望有人能在这里帮助我!谢谢!

(顺便说一句,cmake-js是CMake的前端,它只是将标志直接传递到Cmake,不应影响系统,但仅仅是为了确保,我尝试直接运行Cmake,并使用相同的操作结果)

根据Microsoft的文档来指定元数据目录,您必须将winmd库的编译器选项-AI"directory-path"传递。对于Visual C 2017,请尝试在您的CMakelists.txt文件中增加C 选项:

# windows.winmd search path:
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AI"C:/Program Files (x86)/Windows Kits/10/UnionMetadata"" )
# platform.winmd search path for MSVC 2017:
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -AI"C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/VC/vcpackages"" )

我仅在Visual Studio 2017和Windows 10上测试了这两个搜索路径。