使用CMAKE与Visual Studio BuildTools 2017;无法访问UWP libs
Using CMAKE with visual studio buildtools 2017 ; unable to access UWP libs
我正在尝试使用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上测试了这两个搜索路径。
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 尝试从C++访问 UWP 的电子邮件邮件类会导致"REGDB_E_CLASSNOTREG类未注册"错误
- 通过UWP应用程序定位Windows 10,通过OpenNi 2访问构造传感器
- 如何从Qt应用程序访问UWP API
- 使用CMAKE与Visual Studio BuildTools 2017;无法访问UWP libs
- 当UWP调用我的DLL时,我如何访问它的RoamingState文件夹?