簡體   English   中英

G++ 和 MSBuild 處理“*”作為輸入參數 (argv) 時的區別

[英]G++ and MSBuild difference when handling "*" as input parameter (argv)

在為開源編寫一些小代碼時,我在使用 G++ 和 MSBuild(VS 編譯器)進行編譯時遇到了行為差異。 我想知道這是否是編譯器注入可執行文件的東西,或者這是設置為可執行文件的 Windows 屬性。 無論哪種情況,我都想將其關閉...(g++ 中是否有標志?)。

問題:當我將星號(“*”)作為參數傳遞給在 Visual Studio 中編譯的可執行文件時,argv 包含一個星號(argc==2,argv[1]=="*"),同時執行使用用 G++ 編譯的代碼相同的東西,星號被轉換為文件列表(argc==7,argv[1]=="文件夾中的第一個文件",argv[1]=="文件夾中的第二個文件" , ...)。

我正在研究 Windows 10,使用 VS 2019 和 G++ 10.2.0 (MinGW) 進行編譯。

您可以通過打印 argv 內容重新創建場景:

int main(int argc, char* argv[])
{
    for (int i = 0; i < argc; i++)
    {
        std::cout << argv[i] << std::endl;
    }
}

對可執行文件的調用來自命令行 (cmd):

a.exe *

謝謝里奧

問題解決了。

遵循上面 churill 的建議(參考this )。 如果您與 CRT_noglob.o 鏈接或將全局變量“int _CRT_glob”設置為零(int _CRT_glob = 0;),則有一種方法可以禁用 minGW 的參數擴展。

我已經完成了后者並且它有效。

謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM