Cmake :创建vs的makefile工程(2)

6 篇文章 0 订阅
3 篇文章 0 订阅

1、生成库或者二进制文件,所需的源码文件

     **************.c/cpp  源码文件(编译时使用

     **************.h        头文件(接口声明

     **************.def    模块定义 (.Def) 文件(链接时使用)参考:模块定义 (.Def) 文件

2、编辑CMakelist.txt文件构建工程

请参考:cmake官网手册

其中,CMake 默认编译、链接选项

编译器的参数和链接选项,还得参考 cl /help 的说明 和 link /link 的说明 ,下面给个样例:

	SET(CMAKE_BUILD_TYPE Release)
	SET(CMAKE_C_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG")
	message( STATUS "CMAKE_C_FLAGS_RELEASE: ${CMAKE_C_FLAGS_RELEASE}" )
	SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE  "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} 
	                                       /RELEASE /OPT:REF /OPT:ICF 
	                                       /NODEFAULTLIB:\"msvcrt.lib\" 
	                                       /DEF:${CMAKE_CURRENT_SOURCE_DIR}/src/sql_api2.def ")
	message( STATUS "CMAKE_SHARED_LINKER_FLAGS_RELEASE:${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" )
	ADD_DEFINITIONS("/MT")
	ADD_DEFINITIONS("/GT")
	ADD_DEFINITIONS("/D_RELEASE")
	ADD_DEFINITIONS("/D_CRT_SECURE_NO_WARNINGS")
	ADD_DEFINITIONS("/DWIN32_LEAN_AND_MEAN")
	LINK_LIBRARIES(sqlite3)

3、构建工程,编译

方案一:确认当前cmake工具所支持的vs版本,生成对应版本的Makefile文件,再nmake,具体如下

:: create makefile
cmake -DHOST_NAME=windows -G "NMake Makefiles" ../

:: cl 编译
nmake

方案二:生成对应vs版本的工程文件, 确认当前cmake工具所支持的vs版本

;; 生成工程文件:*.sln
cmake ../ -G "Visual Studio 10 2010"

;; 编译工程文件
msbuild *.sln /p:Configuration=Release

或者通过IDE打开工程*.sln文件在IDE下编译

nmake /help

用法:  NMAKE @commandfile
        NMAKE [选项] [/f makefile] [/x stderrfile] [macrodefs] [targets]

选项:

/A 生成所有已计算的目标
/B 如果时间戳相等则生成
/C 取消输出消息
/D 显示生成消息
/E 覆盖 env-var 宏
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND} 向 Microsoft 报告错误
/G 显示 !include 文件名
/HELP 显示简短的用法消息
/I 忽略命令中的退出代码
/K 遇到错误时继续生成不相关的目标
/N 显示命令但不执行
/NOLOGO 取消显示版权信息
/P 显示 NMAKE 信息
/Q 检查时间戳但不生成
/R 忽略预定义的规则/宏
/S 取消显示已执行的命令
/T 更改时间戳但不生成
/U 转储内联文件
/Y 禁用批处理模式
/? 显示简短用法消息

 msbuild /help

Microsoft(R) 生成引擎版本 4.8.3752.0
[Microsoft .NET Framework 版本 4.0.30319.42000]
版权所有 (C) Microsoft Corporation。保留所有权利。

语法:              MSBuild.exe [选项] [项目文件]

描述:          在项目文件中生成指定的目标。如果
                     未指定项目文件,MSBuild 将搜索
                     当前工作目录来查找文件扩展名
                     以“proj”结尾的文件并使用该文件。

开关:

  /target:<targets>  在此项目中生成这些目标。使用
                     分号或逗号分隔多个目标,或者分别指定
                     每个目标。(缩写: /t)
                     示例: 
                       /target:Resources;Compile

  /property:<n>=<v>  设置或重写这些项目级属性。<n> 是
                     属性名,<v> 为属性值。请使用
                     分号或逗号分隔多个属性,或者
                     分别指定每个属性。(缩写: /p)
                     示例: 
                       /property:WarningLevel=2;OutDir=bin\Debug\

  /maxcpucount[:n]   指定用于生成的最大
                     并发进程数。如果未使用开关,则使用的默认值
                     为 1。如果使用开关时不带值,
                     MSBuild 将最多使用计算机上的
                     处理器数。(缩写: /m[:n])
      
  /toolsversion:<version>
                     要在生成过程中使用的 MSBuild 工具集
                     (任务、目标等) 的版本。此版本将重写
                     个别项目指定的版本。(缩写: 
                     /tv)
                     示例: 
                       /toolsversion:3.5
   
  /verbosity:<level> 在事件日志中显示此级别的信息量。
                     可用的详细级别有: q[uiet]、 m[inimal]、
                     n[ormal]、d[etailed] 和 diag[nostic]。(缩写: /v)
                     示例: 
                       /verbosity:quiet

  /consoleloggerparameters:<parameters>
                     控制台记录器的参数。(缩写: /clp)
                     可用的参数有:
                        PerformanceSummary -- 显示在任务、目标和项目上
                            花费的时间。
                        Summary -- 结束时显示错误和警告的摘要。
                        NoSummary -- 结束时不显示错误和警告
                            的摘要。
                        ErrorsOnly -- 仅显示错误。
                        WarningsOnly -- 仅显示警告。
                        NoItemAndPropertyList -- 在开始生成每个项目时不显示
                            项和属性的列表。    
                        ShowCommandLine -- 显示 TaskCommandLineEvent 消息  
                        ShowTimestamp -- 将时间戳作为所有消息的前缀
                            显示。                                           
                        ShowEventId -- 显示已开始事件、已完成事件和消息
                            的事件 ID。
                        ForceNoAlign -- 不将文本与控制台缓冲区的大小
                            匹配。
                        DisableConsoleColor -- 将默认控制台颜色
                            用于所有记录消息。
                        DisableMPLogging -- 在非多处理器
                            模式下运行时,禁用输出的多处理器
                            日志记录样式。
                        EnableMPLogging -- 即使在非多处理器
                            模式下运行,也启用多处理器
                            日志记录样式。默认情况下启用此日志记录样式。
                        Verbosity -- 重写此记录器的  /verbosity
                            设置。
                     示例:
                        /consoleloggerparameters:PerformanceSummary;NoSummary;
                                                 Verbosity=minimal

  /noconsolelogger   禁用默认控制台记录器,并且不将事件
                     记录到控制台。(缩写: /noconlog)

  /fileLogger[n]     将生成输出记录到文件中。默认情况下,
                     该文件在当前目录中,名称为
                     “msbuild[n].log”。所有节点中的事件合并到
                     单个日志中。fileLogger 的文件和
                     其他参数的位置可以通过添加 
                     “/fileLoggerParameters[n]”开关来指定。
                     “n”(如果存在)可以为 1-9 的数字,允许最多附加
                     10 个文件记录器。(缩写: /fl[n])
    
  /fileloggerparameters[n]:<parameters>                                
                     为文件记录器提供任何额外的参数。
                     存在此开关意味着
                     存在对应的 /filelogger[n] 开关。
                    “n”(如果存在)可以为 1-9 的数字。
                     任何分布式文件记录器也可以使用 
                     /fileloggerparameters,具体可参阅 /distributedFileLogger 的说明。
                     (缩写: /flp[n])
                     为控制台记录器列出的相同参数
                     可用。某些其他可用参数有:
                        LogFile -- 生成日志将写入其中的
                            日志文件的路径。
                        Append -- 确定是将生成日志附加到日志文件,
                            还是覆盖日志文件。如果设置此
                            开关,则会将生成日志附加到日志文件;
                            如果不设置此开关,则会覆盖
                            现有日志文件的内容。
                            默认值为不附加到日志文件。
                        Encoding -- 指定文件的编码,
                            例如,UTF-8、Unicode 或 ASCII
                     默认的详细级别为 Detailed。
                     示例:
                       /fileLoggerParameters:LogFile=MyLog.log;Append;
                                           Verbosity=diagnostic;Encoding=UTF-8

                       /flp:Summary;Verbosity=minimal;LogFile=msbuild.sum 
                       /flp1:warningsonly;logfile=msbuild.wrn 
                       /flp2:errorsonly;logfile=msbuild.err
    
  /distributedlogger:<central logger>*<forwarding logger>                     
                     使用此记录器来记录 MSBuild 中的事件,向每个节点
                     附加不同的记录器实例。若要指定
                     多个记录器,请分别指定每个记录器。
                     (缩写 /dl)
                     <logger> 语法为: 
                       [<logger class>,]<logger assembly>[;<logger parameters>]
                     <logger class> 语法为: 
                       [<partial or full namespace>.]<logger class name>
                     <logger assembly> 语法为: 
                       {<assembly name>[,<strong name>] | <assembly file>}
                     <logger parameters> 是可选的,并且按键入的
                     形式原样传递给记录器。(缩写: /l)
                     示例: 
                       /dl:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral
                       /dl:MyLogger,C:\My.dll*ForwardingLogger,C:\Logger.dll

  /distributedFileLogger                                                       
                     将生成输出记录到多个日志文件,每个 MSBuild 节点
                     一个日志文件。这些文件的初始位置为
                     当前目录。默认情况下,这些文件名为
                     “MSBuild<nodeid>.log”。可通过添加
                     “/fileLoggerParameters”开关来指定 
                     这些文件的位置和 fileLogger 的其他参数。

                     如果日志文件名是通过 fileLoggerParameters
                     开关设置的,分布式记录器将使用 fileName 作为
                     模板并将节点 ID 附加到此 fileName 
                     以便为每个节点创建一个日志文件。
    
  /logger:<logger>   使用此记录器来记录 MSBuild 中的事件。若要指定
                     多个记录器,请分别指定每个记录器。
                     <logger> 语法为: 
                       [<logger class>,]<logger assembly>[;<logger parameters>]
                    <logger class> 语法为: 
                        [<partial or full namespace>.]<logger class name>
                   <logger assembly> 语法为: 
                        {<assembly name>[,<strong name>] | <assembly file>}
                     <logger parameters> 是可选的,并按键入的
                    形式原样传递给记录器。(缩写: /l)
                     示例: 
                       /logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral
                       /logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML

  /validate          依据默认架构验证项目。(缩写: 
                     /val)

  /validate:<schema> 依据指定的架构验证项目。 (缩写: 
                     /val)
                     示例: 
                       /validate:MyExtendedBuildSchema.xsd

  /ignoreprojectextensions:<扩展名>
                     确定要生成的项目文件时要忽略的
                     扩展名的列表。使用分号或逗号来分隔
                     多个扩展名。
                     (缩写: /ignore)
                     示例: 
                       /ignoreprojectextensions:.sln
    
  /nodeReuse:<parameters>
                     允许或禁止重复使用 MSBuild 节点。
                     参数包括: 
                     True -- 生成完成后节点将保留,
                             并且将由后面的生成重复使用(默认)
                     False -- 生成完成后节点将不会保留
                     (缩写: /nr)
                     示例: 
                       /nr:true
    
  /preprocess[:file] 
                     通过嵌入将在生成过程中导入的
                     所有文件并标记其边界,
                     创建一个聚合的项目文件。这对于
                     了解导入什么文件、从何处导入以及
                     这些文件在生成中的构成
                     非常有用。默认情况下,输出将写入
                     控制台窗口。如果提供输出文件的路径,
                     则将改用该路径。
                     (缩写: /pp)
                      示例:
                       /pp:out.txt
    
  /detailedsummary 
                     在生成的结尾显示有关
                     所生成的配置以及如何向节点安排
                     这些配置的详细信息。
                     (缩写: /ds)
    
  @<file>            从文本文件插入命令行设置。若要指定
                     多个响应文件,请分别指定每个响应
                     文件。
                     
                     自动从以下位置使用任何
                     名为“msbuild.rsp”的响应文件:
                     (1) msbuild.exe 的目录
                     (2) 生成的第一个项目或解决方案的目录

  /noautoresponse    不自动包括任何 MSBuild.rsp 文件。(缩写:
                     /noautorsp)

  /nologo            不显示启动版权标志和版权消息。

  /version           仅显示版本信息。(缩写: /ver)

  /help              显示此用法消息。(缩写: /? 或 /h)

示例:

        MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
        MSBuild MyApp.csproj /t:Clean 
                             /p:Configuration=Debug;TargetFrameworkVersion=v3.5
    

 备注:由于windows的c的接口和linux的差异有些非常大,跨平台的工程注意兼容性

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值