mingw64和msvc编译脚本

概述

  • 提供windows下mingw64和msvc编译器的一键编译脚本,
  • 其中msvc编译器是免费的ms_buildtools,下载路径:https://aka.ms/vs/17/release/vs_buildtools.exe
  • mingw64环境的下载路径:https://www.msys2.org/docs/environments/

测试源码

#include <stdio.h>

#include <ctime>
#include <iostream>

using namespace std;

int main() {
  cout << "Hello World!" << endl;

  float fa = 11.1234;
  float fb = 22.1234;
  float fc = 33.1234;
  float fd = 44.1234;

  uint32_t ua = 111;
  uint32_t ub = 222;
  uint32_t uc = 333;
  uint32_t ud = 444;

  int32_t a = -111;
  int32_t b = -222;
  int32_t c = -333;
  int32_t d = -444;

#define MAX_BUF_SIZE 1024 * 245
  char buf[MAX_BUF_SIZE] = {0};
  const uint32_t fmtstr_len = 64;
  static const char* fmt = "\n%.3f,%.3f,%.3f,%.3f,%u,%u,%u,%u,%d,%d,%d,%d";
  clock_t start = clock();
  for (uint64_t i = 0; i < 1000; i++) {
    uint32_t buf_size = MAX_BUF_SIZE;
    char* ptr = buf;
    while (buf_size - fmtstr_len > 0) {
      snprintf(ptr, buf_size, fmt, fa, fb, fc, fd, ua, ub, uc, ud, a, b, c, d);
      ptr += fmtstr_len;
      buf_size -= fmtstr_len;
    }
    // printf("%llu\n", i);
  }
  clock_t end = clock();
  double elapsed_secs = static_cast<double>(end - start) / CLOCKS_PER_SEC;
  std::cout << elapsed_secs << " s" << endl;
  //    printf(buf);
  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(snprintf_test LANGUAGES CXX)

set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -O2 -Wall")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(snprintf_test main.cpp)

windows编译脚本

@echo off

:: VC free compiler download url:https://aka.ms/vs/17/release/vs_buildtools.exe
echo "====== build  start..."

set ROOT_PATH=D:\win_build_package
:: compile solution
if not "%1"=="" (
    set ROOT_PATH=%1
)
echo "====== ROOT_PATH is :" %ROOT_PATH%
set "CURRENT=%cd%"
cd /d %ROOT_PATH%\BuildTools\VC\Tools\MSVC
for /f "delims=" %%i in ('dir 1* /b') do (
    set MSVC_VER=%%i
    GOTO :BREAK
)
:BREAK
echo "MSVC_VER is "%MSVC_VER%
cd /d "%CURRENT%"
set Path=%ROOT_PATH%\BuildTools\VC\Tools\MSVC\%MSVC_VER%\bin\Hostx64\x64;%ROOT_PATH%\CMake_64\bin;%Path%

call %ROOT_PATH%\BuildTools\VC\Auxiliary\Build\vcvarsall.bat amd64
::create empty build directory
set BUILD_DIR=build_mscv
if not exist %BUILD_DIR% (md %BUILD_DIR%) else (del %BUILD_DIR% /a/s/q)
cd /d %BUILD_DIR%
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release ..
nmake
cd ..
echo "====== build success ^_^"

mingw64编译脚本

#!/bin/bash

echo "====== build begin... "

# download url https://www.msys2.org/docs/environments/,
# please aslo install the MINGW64 package,
# and add the "path_to/mingw64/bin" to the system environment PATH
export ROOT_PATH="/d/win_build_package"
if [ -n "$1" ] ;then
export ROOT_PATH=$1
echo "the word you input is $ROOT_PATH"
fi

export MINGW_TOOLCHAIN_PREFIX=$ROOT_PATH"/msys64/mingw64/bin/"
export PATH=$MINGW_TOOLCHAIN_PREFIX:$PATH:$ROOT_PATH"/msys64/usr/bin"
echo $PATH

export CC=${MINGW_TOOLCHAIN_PREFIX}g++
export CXX=${MINGW_TOOLCHAIN_PREFIX}g++
export STRIP=${MINGW_TOOLCHAIN_PREFIX}strip
export AR=${MINGW_TOOLCHAIN_PREFIX}ar
export OBJCOPY=${MINGW_TOOLCHAIN_PREFIX}objcopy
export RANLIB=${MINGW_TOOLCHAIN_PREFIX}ranlib
export READELF=${MINGW_TOOLCHAIN_PREFIX}readelf
export make=${MINGW_TOOLCHAIN_PREFIX}mingw32-make.exe
export LINKFLAGS="-pthread -ldl -lwsock32 -lws2_32 -Wl,-Bstatic -static"
export DYNA_LINKFLAGS="-pthread -ldl -lwsock32 -lws2_32 "
export OTHER_CFLAGS="-mno-ms-bitfields -w"
export OTHER_LIB_BUILD_CFLAG="-lwsock32"
export ARCH_TAG=-mingw64
export MINGW64=1

#create empty build directory
BUILD_DIR=build_mingw

if [ ! -d $BUILD_DIR ]; then
    mkdir $BUILD_DIR
else
    rm -rf $BUILD_DIR/*
fi
cd $BUILD_DIR
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
make

cd ..
echo "====== build success ^_^"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘色的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值