nmake命令(windows下的makefile)

article/2025/10/16 15:16:37

1. 如果已经有vc6的dsp工程,可直接导出nmake脚本文件(.mak)

    “Project - Export Makefile...”

nmake -f nMakeTest.mak CFG="nMakeTest - Win32 Debug"

nmake -f nMakeTest.mak CFG="nMakeTest - Win32 Debug" all

nmake -f nMakeTest.mak CFG="nMakeTest - Win32 Release" clean

     注:如果未指定/F选项,则使用当前目录下的名为makefile的文件

    【nmake /?】  获取更多帮助!  vc6:【D:\program files\Microsoft Visual Studio\VC98\Bin】

                                             vs2008:【D:\program files\Microsoft Visual Studio 9.0\VC\bin】

     为了能正确地使用命令行工具及vc6或vs2008下的函数库,需要对一些环境变量进行设置,最快捷地方式是通过如下方式打开命令行窗口(以vs2008为例):

     

2. vs的c++工程没有提供导出nmake脚本文件的功能,我们只有借助工具或手动编写nmake脚本文件了

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

3. rc.exe 【将.rc资源文本转变成.res二进制文件】  

所在路径:C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\rc.exe

/l 0x804  // 默认语言ID(十六进制数表示)  0x804:简体中文  0x409:美国  更多...

/fo"nMakeTest.res"  // 指定rc文件输出的res名称

例:rc.exe /l 0x804 /fo"nMakeTest.res" /d "_DEBUG" /d "_AFXDLL" “nMakeTest.rc”

4. cl.exe 常见选项 【将.c,.cpp,.cxx编译成obj文件】  更多...

vs2008版本所在路径:D:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\cl.exe

命令行长度说明

windows上整个命令行的长度不能超过260个字符,然而编译命令行往往会超过这个限制,微软提供的解决方案是:将命令行参数写入一个response文件,然后将其传入编译器。

不过要注意的是:response文件仍然有32KB的限制。

如:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe" @"C:\UE4_15_0_Release\Build\Win64\PhysXVehicles.generated.cpp.obj.response"

/nologo   // 不打印版权申明信息

/I "../include"    // 添加头文件查找路径(如果路径中带有空格,一定要用引号括起来)

/DWIN32  // 预编译宏定义(win32程序)

/D_CONSOLE  // 预编译宏定义(控制台程序)

/D "_DEBUG"  // 预编译宏定义(Debug版本)

/D_CRT_SECURE_NO_DEPRECATE  // 预编译宏定义(关闭C4996警告。使用strcpy、strcat等不安全函数时会报C4996警告)

/D_CRT_NONSTDC_NO_DEPRECATE  // 预编译宏定义(关闭C4996警告。使用strcpy、strcat等不安全函数时会报C4996警告)

/DLIB_VER=0x2000 // 预编译自定义宏LIB_VER为0x2000  等价于#define LIB_VER 0x2000

/Od  // 优化选项:带入Debug信息

/O2  // 优化选项:最快速度

/O1  // 优化选项:最小尺寸

/Oy  // 启用帧指针省略【Frame pointer omission (FPO)】优化

       // FPO是一种二进制程序代码优化方法,它压缩或者省略了在栈上为该函数创建框架指针的过程。这个选项加速了函数调用,因为不需要建立和移除框架指针(ESP,EBP)了。

       // 同时,它还解放出了EBP寄存器,用来存储使用频率较高的变量。只在Intel CPU的架构上才有这种优化。

       // 在Vista之前的os中,开启编译优化就会默认进行FPO优化,在Vista以后默认就没有FPO优化了,它所带来的优化效果比起它所带来的函数调用堆栈回溯的问题可以忽略。

/W3  // 设置3级警告级别

/WX     // 将Warining视为error

/wd4326  // 隐藏编译器警告C4326

/we4457 // 将编译器警告C4457视为错误

/Fp"nMakeTest.pch"  // 指定预编译文件名

/Yu"stdafx.h"   // 在生成期间使用预编译头文件

预编译头文件技术,就是把一个工程(Project)中常用的一些头文件(如标准头文件Windows.h、Afxwin.h等,
也可以是自己定义的头文件)包含在stdafx.h中,并对stdafx.cpp载体编译单元(其中#include stdafx.h)预先编译(在所有的.cpp文件编译之前进行编译),
得到编译结果.pch文件(默认名称为ProjectName.pch),后期该工程在编译其它.cpp文件时不再编译stdafx.h中的内容(即使include了它),仅仅使用预编译的结果。

有2点需要注意:
1. 每个cpp的开头都必须#include "stdafx.h"
2. 由于预编译头文件编译很耗时,一旦改动就会引起整个工程重新编译,因此尽量把不易改动的代码包含其中

/FI "myheader.h" // 在每个源文件的第一行上的#include该文件

/Fd"vcpdb/testpdb" // 会将vc辅助编译的idb及pdb文件(见下面的/Gm选项)输入到vcpdb目录中,

                               并重命名为testpdb.idb与testpdb.pdb(这里的pdb为project database文件,用于存工程的数据库信息)

/Fo"objFiles" // 将obj文件输出到objFiles目录中

/c   // 编译但不链接

/feMyTest  // 编译后,输出MyTest.exe可执行文件

 

/EHsc   // 启用"C++异常(Exceptions)"的stack unwind,编译器会插入一些代码保证发生异常后所有try块中的对象都能调用析构函数来做清理工作

/EHa  // 该参数能让C++ try catch,不但能捕捉标准的C++的异常,还能用catch(...)捕获SEH的异常  如:整数除0,access violation (AV)等

 

注:将"Enable C++ Exceptions"设置为No,并不是在代码中不能使用c++异常。

      c++异常抛出能够正确地被catch捕获,只是没有了stack unwind,try块中对象不会调用析构函数,可能会引发泄漏

 

/LD   // 创建动态链接库 
/LDd   // 创建调试动态链接库

/ML   // 使用 libc.lib 创建单线程可执行文件 
/MLd    // 使用 libcd.lib 创建调试单线程可执行文件 
/MT    // 使用 libcmt.lib 创建多线程可执行文件 
/MTd    // 使用 libcmtd.lib 创建调试多线程可执行文件 
/MD    // 使用 msvcrt.lib/msvcrt.dll 创建多线程可执行文件
/MDd    // 使用 msvcrtd.lib/msvcrtd.dll创建调试多线程可执行文件

/Z7   //生成与 C7.0兼容的调试信息 
/Zd   //生成行号 
/Zi    //生成完整的调试信息

/Za  // 禁用语言扩展(不支持ANSI C89 及 C++11) --使用该参数时,编译器会自动定义__STDC__宏

/Ze  // 启用语言扩展(默认)

/Zl  // ZL 非ZI; 告诉编译器从.obj文件中移除默认C库链接指令(注:该链接指令会被传给连接器   形如:/DEFAULTLIB:'LIBCMT')

/Gm     // 启用最小重新生成 

          编译器在.idb文件中存储源文件和类定义之间的依赖关系。
          使用.idb 文件的信息来确定是否需要编译某个源文件。
          而不是该源文件只要包含了被修改的.h文件,就必须重新编译。

/GR  // 启用运行时类型识别信息(RTTI,Run-Time Type Information)  编译器会在exe或dll文件中增加一个.rdata的段来存放变量的类型信息

        例:int a;   bool b = (typeid(a)==typeid(int)); // b为true

/GR-  // 关闭运行时类型识别信息,exe或dll会更小

/Zp8  // 结构体、类等复合类型的数据成员以8字节进行内存对齐

/bigobj  // 提高obj文件中Section数的上限   65,536 (2 ^16) --> 4294967296(2 ^32)  注:vs2005及以上的编译器才支持

/RTCs  // 启用栈帧运行时错误检查。主要体现在:1. 当使用的变量尚未初始化时进行报告   2.检测局部变量(如数组)的溢出和不足   3. 检测ESP损坏,如检测调用约定不匹配可能导致ESP损坏

/Ob2 // 启用函数内联

 

/link  // 将/link后指定的选项传递给link.exe

// 默认情况下,cl.exe编译完后,会自动调用link.exe进行连接,
// 所以直接用cl.exe编译带main函数的.c或.cpp后,会生成obj与exe文件。

例:cl /c test1.cpp test2.cpp  // 编译test1.cpp,test2.cpp

例:cl *.cpp /MD /c /I"G:\Visual C++\VC98\PlatformSDK\Include"

5. link.exe常见选项  【将obj、lib、res链接成dll或exe等可执行文件】

vs2008版本所在路径:D:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\link.exe

/dll  // 输出dll文件

-lib  // 生成lib静态库文件  例:link -lib *.obj /out:test.lib 

/libpath:"..\PublicSDK\lib" // 指定外部lib查找路径(路径中不能带有空格,否则链接时会报LNK1181的错误)

/subsystem:windows[console]   // 指定子系统

/machine 指定目标平台{AM33|ARM|EBC|IA64|M32R|MIPS|SH3|SH3DSP|SH4|SH5|THUMB|X86|X64},等

/NODEFAULTLIB:libcd.lib  // 链接时,忽略libcd.lib库

/debug  // 生成调试信息

/export:myAdd=_Add,@1   // 导出extern "C" Add函数,并将符号名修改为myAdd,同时将导出序号设为1(一种dll动态库导出符号的方法)

/export:_g_isTest,@2   // 导出extern "C" g_isTest变量,并将导出序号设为2(一种dll动态库导出符号的方法)

/def:"nMakeTest.def" // 模块导出文件(另外一种dll动态库导出符号的方法)

注1:def文件名不要求与dll文件名或工程名一致
注2:一个dll工程最多只允许使用一个def文件
注3:vc:只需将def文件添加到工程中即可
注4:vs2008:项目 - 属性 - 连接器 - 输入 - 模块定义文件,填入def文件名(def文件要放在当前工程目录之下,def文件可不添加到工程中)

;nMakeTest.lib 导出DLL函数
;作者:kekec
LIBRARY nMakeTest.def
EXPORTS
Add @ 1
g_isTest @ 2

注:还可以在代码中使用__declspec(dllexport)进行符号的导出

#ifdef WIN32DLL_EXPORTS
#define WIN32DLL_API __declspec(dllexport)
#else
#define WIN32DLL_API __declspec(dllimport)
#endif

/************** export.c ***************/ 
#ifdef __cplusplus
extern "C"
{
#endif
    WIN32DLL_API int __stdcall Add(int a, int b)
    {
        return (a + b);
    }

    WIN32DLL_API int g_isTest = 0;
#ifdef __cplusplus
}
#endif

/pdb:"nMakeTest.pdb"  // 重命名生成的pdb文件(Program Debug Database),保存调试符号等信息

/map:"nMakeTest.map" // 重命名生成的map文件

/out:"nMakeTest.exe" // 重命名生成的exe文件

/implib:"test.lib"  // 生成名为test.lib的导出库

/stack:0x300000  // 设置线程栈Reserve内存大小为3MB  windows缺省是1MB   -- 格式:/STACK:reserve[,commit]

/stack:0x500000,0x200000  // 设置线程栈Reserve内存大小为5MB,Commit内存大小为2MB   windows缺省是1MB   -- 格式:/STACK:reserve[,commit]

/entry:_DllMainCRTStartup@12   // 指定_DllMainCRTStartup函数dll的起始地址

/release  // 生成checksum

/incremental:yes   // 开启增量链接

          incremental开关默认是开启的。
          开启增量链接产生的exe或dll文件的size要大一些。
          因为有代码和数据的填充,增量链接的exe或dll文件会包含跳转trunk来处理函数重定位到新地址。 
          MSDN上明确指出:为确保最终发布版本不包含填充或者trunk,请关闭增量链接。

例:link gdiplus.lib /subsystem:windows /out:test.exe file1.obj file2.lib file3.res // 生成名为test.exe的windows可执行程序
例:link gdiplus.lib /subsystem:console /out:test.exe *.obj file2.lib file3.res // 生成名为test.exe的控制台可执行程序
例:link gdiplus.lib /subsytem:windows /dll /out:test.dll /implib:test.lib /def:test.def *.obj file2.lib file3.res // 生成名为test.dll动态库

例:link *.obj rc.res /LIBPATH:"G:\Visual C++\lib" /SUBSYSTEM:WINDOWS /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib OpenGL32.Lib

例:"D:/Program Files (x86)/Microsoft Visual Studio 9.0/VC/bin/link.exe"  /MANIFEST:NO /NOLOGO /DEBUG /errorReport:prompt /MACHINE:x86 /SUBSYSTEM:WINDOWS /FIXED:No /LARGEADDRESSAWARE /NXCOMPAT /STACK:5000000,5000000 /SAFESEH /DEF:UnrealEngine3.def /DELAY:UNLOAD /RELEASE /OPT:REF /OPT:ICF /INCREMENTAL:NO /DELAYLOAD:"dxgi.dll" /DELAYLOAD:"d3d10.dll" /LIBPATH:"../External/zlib/Lib" /LIBPATH:"D:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\/Lib/x86" /NODEFAULTLIB:"MSVCRTD" /NODEFAULTLIB:"MSVCPRTD" /NODEFAULTLIB:"LIBC" /NODEFAULTLIB:"LIBCMT" /NODEFAULTLIB:"LIBCPMT" /NODEFAULTLIB:"LIBCP" /NODEFAULTLIB:"LIBCD" /NODEFAULTLIB:"LIBCMTD" /NODEFAULTLIB:"LIBCPMTD" /NODEFAULTLIB:"LIBCPD" @"g:\svn\MyGame\Binaries\Win32\MyGameRelease.exe.response" /OUT:"g:\svn\MyGame\Binaries\Win32\MyGameRelease.exe" /IMPLIB:"g:\svn\MyGame\Binaries\Win32\MyGameRelease.lib" /PDB:"g:\svn\MyGame\Binaries\Win32\MyGameRelease.pdb" /CLRTHREADATTRIBUTE:STA /FILEALIGN:0x1000

6. nmake指令说明

(1) 符号说明

     #   // 注释符(命令所在行不能使用注释符,命令应该与注释都独立使用一行进行书写;如:erase nMakeTest.obj  # 删除nMakeTest.obj文件【非法】)

     ^#abc  // 表示#abc这个字符串

     \  // 连接符,用于将两行合并为一行;在宏中,分多行写时,一定要用"\"进行连接

     %  // 文件说明符,表示其后的字符串为一文件名

---------------------

若文件名为 c:\prog.exe
%s 将为 c:\prog.exe 
%:F 将为 c:\prog.exe
%:dF 将为 c
%:pF 将为 c:\
%:fF 将为 prog
%:eF 将为 exe

---------------------

     @  // 命令修饰符;防止修饰的命令的结果,被打印出来

      !       // 命令修饰符

  $  // 宏引用符

      :  // 依赖符号

  ?【*】  // 通配符支持  

++++++++++++++++++++++++++++++++++++

     $@   // 表示所有目标全名(路径+文件名称+扩展名)的挨个值

     $$@  // 与$@用法含义一致,但仅在作为依赖项中的依赖项时有效

     $<   // 表示所有依赖目标的挨个值,仅在推理规则的命令中有效

     $^   // 表示所有依赖目标的集合,以空格分隔,若有重复,会被去重;

     $+   // 与$^含义一致,只是不进行去重处理。
     $?    // 表示所有比目标心的依赖目标的集合,以空格分隔

     $*    // 当前目标的路径和文件名称,没有文件扩展名
     $**  // 当前目标的所有依赖项

----------------------------

修饰符   说明  
D         驱动器和目录  
B         文件名称  
F         文件名称和扩展名  
R         驱动器、目录和文件名称

----------------------------

(2) 长文件名用双引号引起来

  例:ALL : nMakeTest.dll  // 文件名较短时,可不需要引号
  例:ALL : "$(OUTDIR)\nMakeTest.exe" // 文件名较长时,特别是路径中有空格的情况,一定要用引号

(3) 预定义规则

.c.obj    // 默认操作:cl /c $*.c

也可对默认操作显示地重写:

 

.c.obj:
    cl /c /Ox /DWIN32 $<

 

(4) 包含文件

!INCLUDE nmake.opt

include makefile.mak

(5) 条件判断 - 01

!IF "$(CFG)" == ""
CFG=nMakeTest - Win32 Debug
!MESSAGE No configuration specified. Defaulting to nMakeTest - Win32 Debug.
!ELSE
!MESSAGE Be specified.
!ENDIF

(6) 条件判断 - 02  【!IFNDEF   !IFDEF】

!IFNDEF PRIVATE_RUNTIMEMODE_DEBUG
RUNTIMEMODE_DEBUG = /MDd 
!ELSE
RUNTIMEMODE_DEBUG = $(PRIVATE_RUNTIMEMODE_DEBUG)
!ENDIF

(7) 输出消息日志

!MESSAGE Invalid configuration "$(CFG)" specified.

(8) 描述块 - makefile的核心 【注:在依赖项(或规则)和命令块之间不能出现空行,commands之前为一个tab字符,多条command之间用;分割】

     只要dependences中任意一个文件比targets新,就执行commands命令

targets... : dependences...
  commands...

(9) ALL / CLEAN

OUTDIR=.\Release
INTDIR=.\Release
ALL : "$(OUTDIR)\nMakeTest.exe"
CLEAN :
  -@erase "$(INTDIR)\nMakeTest.obj"
  -@erase "$(INTDIR)\nMakeTest.pch"
  -@erase "$(INTDIR)\nMakeTest.res"
  -@erase "$(INTDIR)\nMakeTestDlg.obj"
  -@erase "$(INTDIR)\StdAfx.obj"
  -@erase "$(INTDIR)\vc60.idb"
  -@erase "$(OUTDIR)\nMakeTest.exe"
  -@erase "$(OUTDIR)\nMakeTest.map"
"$(OUTDIR)" :
  if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"

(10) 编译

CPP=cl.exe
CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\nMakeTest.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
.c{$(INTDIR)}.obj::
  $(CPP) @<<
  $(CPP_PROJ) $< 
<<
.cpp{$(INTDIR)}.obj::
  $(CPP) @<<
  $(CPP_PROJ) $< 
<<
.cxx{$(INTDIR)}.obj::
  $(CPP) @<<
  $(CPP_PROJ) $< 
<<

(11) 链接

LINK32=link.exe
LINK32_FLAGS=/nologo /subsystem:windows /incremental:no /pdb:"$(OUTDIR)\nMakeTest.pdb" /map:"$(INTDIR)\nMakeTest.map" /machine:I386 /out:"$(OUTDIR)\nMakeTest.exe" 
LINK32_OBJS= \
  "$(INTDIR)\nMakeTest.obj" \
  "$(INTDIR)\nMakeTestDlg.obj" \
  "$(INTDIR)\StdAfx.obj" \
  "$(INTDIR)\nMakeTest.res"
"$(OUTDIR)\nMakeTest.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
   $(LINK32) @<<
  $(LINK32_FLAGS) $(LINK32_OBJS)
<<

(12) 文件依赖

SOURCE=.\nMakeTest.cpp
"$(INTDIR)\nMakeTest.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\nMakeTest.pch"
SOURCE=.\nMakeTest.rc
"$(INTDIR)\nMakeTest.res" : $(SOURCE) "$(INTDIR)"
$(RSC) $(RSC_PROJ) $(SOURCE)

(13) 预编译文件

SOURCE=.\StdAfx.cpp
!IF "$(CFG)" == "nMakeTest - Win32 Release"
CPP_SWITCHES=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\nMakeTest.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
"$(INTDIR)\StdAfx.obj" "$(INTDIR)\nMakeTest.pch" : $(SOURCE) "$(INTDIR)"
  $(CPP) @<<
 $(CPP_SWITCHES) $(SOURCE)
<<
!ELSEIF "$(CFG)" == "nMakeTest - Win32 Debug"
CPP_SWITCHES=/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"$(INTDIR)\nMakeTest.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
"$(INTDIR)\StdAfx.obj" "$(INTDIR)\nMakeTest.pch" : $(SOURCE) "$(INTDIR)"
  $(CPP) @<<
 $(CPP_SWITCHES) $(SOURCE)
<<
!ENDIF

# 参考

1. http://msdn.microsoft.com/zh-cn/library/dd9y37ha(v=vs.80).aspx
2. http://c2.com/cgi/wiki?UsingNmake 
3. http://zh.wikipedia.org/wiki/Make

4. cl.exe link.exe用法详解

5. http://blog.codingnow.com/2008/09/replacement_of_ide_1.html
6. http://blog.codingnow.com/2008/09/replacement_of_ide_2
7. http://blog.codingnow.com/2008/09/replacement_of_ide_3
8. http://blog.codingnow.com/2008/09/replacement_of_ide_4


http://chatgpt.dhexx.cn/article/gQI32CCe.shtml

相关文章

nmake简介

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 nmake学习初步 前言一、nmake在哪里&#xff1f;二、Makefile编写1.hello.c实例代码2. Makefile3 扩展 前言 一直使用vs的IDE&#xff0c;最近编译sqlcipher时&#xff0c;发…

第八章 查询和检索:Query DSL

版权声明 本文为Elastic开源社区版权所有,保证独立性和原创性,未获得授权和允许,任何组织和个人不得以任何方式传播或复制或分享。否则必将追究法律责任。 知识内容输出不易,请尊重他人劳动成果。严禁随意传播、复制和盗用他人成果或文章内容用以商业或盈利目的! 1、查询…

mysql-dql(Data QueryLanguage)summary

1.基础查询 DESC 库名//查看库SHOW DATABASES ;//查看当前所在数据库SHOW TABLES;//查看当前库的所有表USE database;//datebase为需要查询的库名SELECT attribute,attribute2 FROM form;//从form中查询attribute,attribute2SELECT * FROM beauty;//查询表中所有属性SELECT DI…

db.query的使用

首先假设有如下表格&#xff0c;表格名称为&#xff1a;"Employees" SQL基本格式如下&#xff1a; [sql] view plain copy print ? select 列名称 from 表名称 最基本SQL语句&#xff0c;就是从表中选取要返回的列数据&#xff0c;不加任何过滤条件。当然如果&qu…

Elasticsearch——Query DSL语法入门

Query DSL入门 官网介绍链接&#xff1a; https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html search api就是对存储在elastic search&#xff08;以下简称es&#xff09;中的数据进行查询的相关API&#xff0c;可以类比mysql中的select语句。…

Data Query Language(DQL):数据查询语言

Data Query Language&#xff08;DQL&#xff09;&#xff1a;数据查询语言 基础查询查询所有列查询指定列 条件查询条件查询介绍查询示例如下 模糊查询模糊查询介绍查询示例如下 字段控制查询排序聚合函数分组查询分页查询 建立三张表用于查询&#xff0c;表中数据如下。 stu表…

SpringDataJPA+QueryDSL玩转态动条件/投影查询

在本文之前&#xff0c;本应当专门有一篇博客讲解SpringDataJPA使用自带的SpecificationJpaSpecificationExecutor去说明如何玩条件查询&#xff0c;但是看到新奇、编码更简单易懂的技术总是会让人感到惊喜&#xff0c;而且QueryDSL对SpringDataJPA有着完美的支持。如果你没有使…

ES的Query DSL语句介绍

1、term 过滤 term主要用于精确匹配哪些值&#xff0c;比如数字&#xff0c;日期&#xff0c;布尔值或 not_analyzed 的字符串(未经切词的文本数据类型)&#xff1a; { "term": { "date": "2017-07-01" }} { "term": { "tit…

QueryDSL配置

QueryDSL配置 1&#xff1a;maven配置- <dependency><groupId>com.querydsl</groupId><artifactId>querydsl-jpa</artifactId><version>5.0.0</version></dependency><dependency><groupId>com.querydsl</gro…

Elasticsearch:DSL Query

Query DSL的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有的数据&#xff0c;一般测试用&#xff0c;例如&#xff1a;match_all&#xff0c;但有分页限制&#xff0c;一次20…

SpringBoot+Querydsl 框架,大大简化复杂查询操作

概述 本篇博客主要将介绍的是利用spring query dsl框架实现的服务端查询解析和实现介绍。 查询功能是在各种应用程序里面都有应用&#xff0c;且非常重要的功能。用户直接使用的查询功能往往是在我们做好的UI界面上进行查询&#xff0c;UI会将查询请求发给查询实现的服务器&a…

QueryDSL 关于Q类找不到的问题

先编译代码&#xff0c;如果是在idea中&#xff0c;光标移动到项目上&#xff0c;F4&#xff0c;让后如图操作 回到项目中编码&#xff0c;就可以找到Q类了

JPA 之 QueryDSL-JPA 使用指南

Querydsl-JPA 框架&#xff08;推荐&#xff09; 官网&#xff1a;传送门 参考&#xff1a; JPA整合Querydsl入门篇SpringBoot环境下QueryDSL-JPA的入门及进阶 概述及依赖、插件、生成查询实体 1.Querydsl支持代码自动完成&#xff0c;因为是纯Java API编写查询&#xff0…

使用spring data Querydsl 实现动态查询功能

Table of Contents 概述 定义查询请求 google-like查询 特定字段的类sql查询 使用Spring Data Querydsl 利用Spring Query DSL实现动态查询 实现过程中的难题 主表包含多个子表数据时的AND查询 概述 本篇博客主要将介绍的是利用spring query dsl框架实现的服务端查询解…

关于 QueryDSL 配置和使用(详细)

关于 QueryDSL 最近写项目&#xff0c;使用到了 Jpa 这个 ORM 规范支持&#xff0c;使用注解的方式实现 Sql &#xff0c;但是用过 Jpa 的同学都知道 Jpa 对于单表操作很灵活&#xff0c;但是对于复杂一些的 SQL 就是很不友好了&#xff0c;所以这个地方我们就用到了 QueryDSL…

Spring Boot配置QueryDSL(生成Query查询实体类,查询数据)

1 QueryDSL QueryDSL仅仅是一个通用的查询框架&#xff0c;专注于通过Java API构建类型安全的SQL查询。 Querydsl可以通过一组通用的查询API为用户构建出适合不同类型ORM框架或者是SQL的查询语句&#xff0c;也就是说QueryDSL是基于各种ORM框架以及SQL之上的一个通用的查询框架…

微信开发之服务号设置

服务号设置 公众号开发主要用到AppID AppSecret 以下操作前提是&#xff0c;服务号已认证 在开发基本设置里 设置开发者模式开启设置appSecret 需要管理员扫码设置ip白名单 需要管理员扫码服务器配置启用&#xff0c;填写服务器验证地址 在开发者工具&#xff0c;web开发者工具…

微信服务号开发

最近终于完成了团队微信服务号的开发&#xff0c;深深的喘了一口气&#xff0c;还记得在差不多10天前&#xff0c;我们几个为了参加学校服务外包大赛的队友一起讨论选题&#xff0c;最终确定了以微信为基底开发一个人力资源管理系统的微信公众平台&#xff0c;几天后&#xff0…

微信开发公众号

背景&#xff1a; 过年前后做了个微信公众号项目&#xff0c;已经过去一段时间了&#xff0c;抽空回忆总结下基本流程吧&#xff0c;不然很快估计自己就忘了。。 文章目录 一、注册公众号二、了解公众号管理页面三、必备开发者工具的使用1.开发者文档2.在线接口调试工具3.web开…

微信服务号Java开发(一)

发送模板消息 1. 服务器配置 解析&#xff1a;微信发送一个get请求&#xff0c;并携带4个参数&#xff1a;signature、timestamp、nonce、echostr。开发者需要验证该请求是否来源于微信&#xff0c;验证方法&#xff1a; 1&#xff09;将token、timestamp、nonce三个参数进行字…