Visual Studio自动生成

命令行

基于cl(代码编译器)、rc(资源编译器)和link(链接器)后台软件的脚本编译工程

Visual Studio 2013

用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]

用法: rc [ 选项... ] .rc输入文件名

// test.cpp
#include <windows.h>
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,  
                     _In_opt_ HINSTANCE hPrevInstance,  
                     _In_ LPWSTR    lpCmdLine,  
                     _In_ int       nCmdShow)   
{
  MessageBox(NULL,"Hello Win32","sdk",MB_ABORTRETRYIGNORE|MB_ICONERROR);
  return 0;
}
# 最简单cl、rc和link运用
cl /c test.cpp
rc /l 0x804 file.rc
link test.obj user32.lib

PS: 参数区分大小写,斜杠(/)和减号(-)可以互换

编译链接器

CL.exe和link.exe所在目录取决于VS版本和平台

VS2013:

Win32平台 - C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

x64平台      - C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64

参数说明

编译参数(cl)

  • /c                           只编译
  • /I                            头文件搜索目录
  • /D WIN32               编译宏定义
  • /W3                        警告等级3(默认)
  • /WX-                       警告视为错误否
  • /Fo:*.obj                 命名对象文件

编译参数(rc)

链接参数

  • /libpath                    库文件搜索目录
  • /debug                     生成调试信息
  • /pdb:"*.pdb"             生成程序数据库文件
  • /dynamicbase          随机基址
  • /machine:X86|X64   目标计算机
  • subsystem:console|windows 

实用例子

 hello.h

#if defined(LIB_EXPORTS) 
    #define LIB_API __declspec(dllexport)
#else 
    #define LIB_API __declspec(dllimport) 
#endif

LIB_API void print1();
LIB_API void print2(int i);

hello.c

#include <stdio.h>
#include "hello.h"

void print1()
{
	printf("hello void print1()\n");
}

void print2(int i)
{
	printf("hello void print2(%d)\n", i);
}

 main.c

#include <stdio.h>
#include "hello.h"

int main()
{
	printf("start ...\n");
	print1();
	return 0;
}

 build_simple.bat

@echo off

echo start ...
pushd "%VS120COMNTOOLS%"..\..\VC && call vcvarsall.bat x86_amd64 && popd

del *.obj *.dll *.lib *.exe *.exp

cl -D LIB_EXPORTS -c hello.c
link -DLL hello.obj
cl -c main.c
link main.obj hello.lib

echo done
pause>nul

build.bat

@echo off

del *.obj *.dll *.lib *.exe *.exp *.ilk *.pdb

echo start ...
pushd "%VS120COMNTOOLS%"..\..\VC && call vcvarsall.bat x86_amd64 && popd

cl /Zi /nologo /W3 /WX- /Od /MD /D WIN32 /D _DEBUG /D LIB_EXPORTS /c hello.c
cl /Zi /nologo /W3 /WX- /Od /MD /D WIN32 /D _DEBUG /c main.c

link /nologo /machine:x64 /DEBUG /dll /pdb:hello.pdb /implib:hello.lib /out:"hello.dll" hello.obj
link /nologo /machine:x64 /DEBUG /pdb:main.pdb /out:"main.exe" /dynamicbase hello.lib main.obj

echo done
pause>nul

makefile.msvc

# Simple makefile for nmake

#===========================================================
# Variables

MSVCDir=""
CPP=cl.exe
LINK=link.exe
CFLAGS1=/c /nologo /MD /W3 /Zi /Od /D WIN32 /D LIB_EXPORTS
CFLAGS2=/c /nologo /MD /W3 /Zi /Od /D WIN32 
DLL_LINK_FLAGS=/nologo /machine:x64 /DEBUG /pdb:hello.pdb /dll /implib:"hello.lib" /out:hello.dll
EXE_LINK_FLAGS=/nologo /machine:x64 /DEBUG /pdb:main.pdb /subsystem:console /out:main.exe /dynamicbase

#===========================================================
# Targets

ALL : hello.dll main.exe
	-@echo ALL : hello.dll main.exe

CLEAN : 
	-@erase *.obj *.dll *.lib *.exe *.exp *.ilk *.pdb


#===========================================================
# 

hello.dll : hello.obj
	$(LINK) $(DLL_LINK_FLAGS) hello.obj

hello.obj : hello.c
	$(CPP) $(CFLAGS1) /c hello.c /Fo:hello.obj

main.exe : main.obj
	$(LINK) $(EXE_LINK_FLAGS) hello.lib main.obj

main.obj : main.c
	$(CPP) $(CFLAGS2) main.c

make.bat

@echo off

if "%1"=="clean" GOTO CLEAN

pushd "%VS120COMNTOOLS%"..\..\VC && call vcvarsall.bat x86_amd64 && popd

nmake -nologo -s -f makefile.msvc
goto END

:CLEAN
nmake -nologo -s -f makefile.msvc clean
goto END

:END

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual Studio中提供了代码生成器,可以帮助开发人员快速生成代码,提高开发效率。其中一些常用的代码生成器包括: 1. 输入模板名称并按下两次TAB键:这个功能可以让Visual Studio根据模板名称自动补全代码,例如输入"foreach"然后按下TAB键两次,就会生成一个foreach循环的代码块。 2. foreach: 可以快速生成遍历集合的代码块,例如"foreach (var item in collection) {}"。 3. do...while loop: 可以生成一个do...while循环的代码块,例如"do { } while (condition);"。 4. while loop: 可以生成一个while循环的代码块,例如"while (true) {}"。 5. if: 可以生成一个if条件判断的代码块,例如"if (true) { }"。 6. try...catch: 可以生成一个try...catch异常处理的代码块,例如"try { } catch (Exception ex) { }"。 7. class: 可以生成一个类的代码块,例如"class MyClass { }"。 8. ctor: 可以根据当前的类名生成一个空的构造函数,例如"public ClassName() { }"。 9. cw: 可以生成一个Console.WriteLine()的代码行,用于在控制台输出信息。 10. indexer: 可以生成一个索引器的代码块,用于访问类的属性或字段。 11. Exception: 可以生成一个异常处理的代码块,例如"if (true) { throw new Exception(); }"。 12. propg: 可以生成一个只读的自动属性,包含get和private set方法。 13. prop: 可以生成一个可读写的自动属性,包含get和set方法。 通过使用这些代码生成器,开发人员可以快速生成常见的代码结构,提高代码编写效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [VisualStudio代码生成器 c#代码生成器 VS代码自动生成器 .net C# VS 自动生成代码实体](https://download.csdn.net/download/l726972012/36763814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Visual Studio开发快捷键与代码自动生成](https://blog.csdn.net/qq_35293120/article/details/107138769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值