xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
10.07k stars 786 forks source link

打包报错 无法打开包括文件: “atlcomcli.h”: No such file or directory #3253

Open Kojima648 opened 1 year ago

Kojima648 commented 1 year ago

Xmake 版本

xmake v2.7.4+master.93935417a, A cross-platform build utility based on Lua

操作系统版本和架构

Windows 10 专业版 19045.2364 22H2

描述问题

图片 图片 图片 图片 图片

单个组件atl 有 141 142 143版本的,VS是专业版更到了最新,xmake也是最新,仓库:https://github.com/yamashi/CyberEngineTweaks 我看自动化跑过了,我自己没跑过,不知道什么原因。

期待的结果

期待的结果是,不报错,能正常编译。

工程配置

No response

附加信息和错误日志

`set_xmakever("2.7.2")

set_languages("cxx20") set_arch("x64")

add_rules("mode.debug","mode.releasedbg", "mode.release") add_rules("plugin.vsxmake.autoupdate") add_rules("c.unity_build")

add_cxflags("/bigobj", "/MP") add_defines("RED4EXT_STATIC_LIB", "UNICODE", "_UNICODE", "_CRT_SECURE_NO_WARNINGS")

if is_mode("debug") then add_defines("CET_DEBUG") set_symbols("debug") set_optimize("none") set_runtimes("MDd") set_warnings("all") set_policy("build.optimization.lto", false) elseif is_mode("releasedbg") then add_defines("CET_DEBUG") set_symbols("debug") set_optimize("fastest") set_runtimes("MD") set_warnings("all") set_policy("build.optimization.lto", true) elseif is_mode("release") then add_defines("NDEBUG") set_symbols("hidden") set_strip("all") set_optimize("fastest") set_runtimes("MD") set_warnings("all", "error") set_policy("build.optimization.lto", true) end

local imguiUserConfig = path.absolute("src/imgui_impl/imgui_user_config.h")

add_requireconfs("*", { debug = is_mode("debug"), lto = not is_mode("debug"), configs = { shared = false } }) add_requires("spdlog 1.10.0") add_requires("nlohmann_json") add_requires("hopscotch-map") add_requires("minhook") add_requires("mem") add_requires("tiltedcore 0.2.7") add_requires("sqlite3") add_requires("xbyak") add_requires("stb") add_requires("sol2", { configs = { includes_lua = false } }) add_requires("openrestry-luajit", { configs = { gc64 = true } }) add_requires("imgui v1.88-docking", { configs = { wchar32 = true, freetype = true, user_config = imguiUserConfig } })

target("RED4ext.SDK") set_kind("static") set_group("vendor") add_files("vendor/RED4ext.SDK/src/.cpp") add_headerfiles("vendor/RED4ext.SDK/include/.hpp") add_includedirs("vendor/RED4ext.SDK/include/", { public = true }) on_install(function() end)

target("cyber_engine_tweaks") add_defines("WIN32_LEAN_AND_MEAN", "NOMINMAX", "WINVER=0x0601", "SOL_ALL_SAFETIES_ON", "SOL_LUAJIT=1", "SOL_EXCEPTIONS_SAFE_PROPAGATION", "SPDLOG_WCHAR_TO_UTF8_SUPPORT", "SPDLOG_WCHAR_FILENAMES", "SPDLOG_WCHAR_SUPPORT", "IMGUI_USER_CONFIG=\""..imguiUserConfig.."\"") -- WINVER=0x0601 == Windows 7xmake set_pcxxheader("src/stdafx.h") set_kind("shared") set_filename("cyber_engine_tweaks.asi") add_files("src/.cpp") add_headerfiles("src/.h", "build/CETVersion.h") add_includedirs("src/", "build/") add_syslinks("User32", "Version", "d3d11") add_packages("spdlog", "nlohmann_json", "minhook", "hopscotch-map", "imgui", "mem", "sol2", "tiltedcore", "sqlite3", "openrestry-luajit", "xbyak", "stb") add_deps("RED4ext.SDK") add_configfiles("src/CETVersion.h.in")

on_package(function(target)
    import("net.http")

    os.rm("package/*")

    os.mkdir("package/bin/x64/plugins/cyber_engine_tweaks/tweakdb")
    http.download("https://github.com/WolvenKit/WolvenKit/raw/main/WolvenKit.Common/Resources/usedhashes.kark", "package/bin/x64/plugins/cyber_engine_tweaks/tweakdb/usedhashes.kark")
    http.download("https://github.com/WolvenKit/WolvenKit/raw/main/WolvenKit.Common/Resources/tweakdbstr.kark", "package/bin/x64/plugins/cyber_engine_tweaks/tweakdb/tweakdbstr.kark")

    os.mkdir("package/bin/x64/plugins/cyber_engine_tweaks/scripts")
    os.cp("scripts/*", "package/bin/x64/plugins/cyber_engine_tweaks/scripts")

    os.mkdir("package/bin/x64/plugins/cyber_engine_tweaks/fonts")
    os.cp("fonts/*", "package/bin/x64/plugins/cyber_engine_tweaks/fonts")

    os.cp("vendor/asiloader/*", "package/bin/x64/")

    os.cp("LICENSE", "package/bin/x64/")
    os.cp("ThirdParty_LICENSES", "package/bin/x64/plugins/cyber_engine_tweaks/ThirdParty_LICENSES")

    os.cp(target:targetfile(), "package/bin/x64/plugins/")
end)
on_install(function(target)
    cprint("${green bright}Installing Cyber Engine Tweaks ..")
    assert(os.isdir("$(installpath)"), format("The path in your configuration doesn't exist or isn't a directory.\n\tUse the follow command to set install path:\n\txmake f --installpath=%s", [["C:\Program Files (x86)\Steam\steamapps\common\Cyberpunk 2077\bin\x64\plugins"]]))
    os.cp(target:targetfile(), "$(installpath)")
    cprint("Cyber Engine Tweaks installed at: ${underline}%s", "$(installpath)")
end)

option("installpath") set_default("installpath") set_showmenu(true) set_description("Set the path to install cyber_engine_tweaks.asi to.", "e.g.", format("\t-xmake f --installpath=%s", [["C:\Program Files (x86)\Steam\steamapps\common\Cyberpunk 2077\bin\x64\plugins"]])) `

waruqi commented 1 year ago

自己找下 atlcomcli.h 在系统哪里。。

然后执行 xmake l detect.sdks.find_vstudio 从里面显示的 INCLUDE 路径里,对下 atlcomcli.h 所在路径是否在里面。

Kojima648 commented 1 year ago

图片 图片

我搜到了3个 atlcomcli.h 文件,我装了三个版本的,然后INCLUDE,只引用了 "D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.34.31933\include;

而那个.h的 文件夹目录在 MSVC\14.34.31933\atlmfc\include 更下面一层的include里,如图所示。

waruqi commented 1 year ago

你可以 ci 上,也看下这个 INCLUDE 里面的路径差异。。感觉这个跟 xmake 好像也没啥关系,vs 环境问题,这个 INCLUDE 里面的路径也是 vs 的 vcvarsall.bat 提供的,它返回的路径,如果少了啥,xmake 是没法控制的。

Kojima648 commented 1 year ago

你可以 ci 上,也看下这个 INCLUDE 里面的路径差异。。感觉这个跟 xmake 好像也没啥关系,vs 环境问题,这个 INCLUDE 里面的路径也是 vs 的 vcvarsall.bat 提供的,它返回的路径,如果少了啥,xmake 是没法控制的。

https://github.com/yamashi/CyberEngineTweaks/actions/runs/3725148122/jobs/6317769357 这个CI 日志看不到那么详细的信息吧,我不知道怎么找

waruqi commented 1 year ago

fork 下,在 ci yml 里面 xmake l detect.sdks.find_vstudio 自己 dump 下,然后到自己的 fork 的repo ci 里面看下。。

Kojima648 commented 1 year ago

fork 下,在 ci yml 里面 xmake l detect.sdks.find_vstudio 自己 dump 下,然后到自己的 fork 的repo ci 里面看下。。

和这里的大小写有没有关系? 图片

Kojima648 commented 1 year ago

图片

我看了下,CI的也是大写,好像不区分大小写,但是不知道为啥我就编译不过。我对比了下,INCLUDE 除了盘符不一样,其他都一样的路径

waruqi commented 1 year ago

确认下你的系统是否大小写敏感,一般 win 上都是大小写不敏感的,但是也可以搞成敏感的。。

如果你本地 include 那个路径,可以打开,能否访问到 atlcomcli.h 。。那就不清楚了,include里面也设置进去了。。

Kojima648 commented 1 year ago

我试了,不敏感,大小写都能进去文件夹的。

Kojima648 commented 1 year ago

麻了,不知道为啥找不到,路径都包含进去了。

waruqi commented 1 year ago

你一开始那个图里不是没 atlmfc/include 这个路径么?怎么又有了?

image
Kojima648 commented 1 year ago

可能是因为我原本没有那个atlmfc,然后我又重装了下VS的组件,后面就有路径了,文件也是在那里的。路径也在配置里

Kojima648 commented 1 year ago

反正就是很奇怪,我刚才用家里电脑试了,可以编译,不会有这个问题。

图片

waruqi commented 1 year ago

那应该还是 vs 环境问题,这个我也不清楚了。