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

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的差異有些非常大,跨平臺的工程注意兼容性

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章