1、生成庫或者二進制文件,所需的源碼文件
**************.c/cpp 源碼文件(編譯時使用)
**************.h 頭文件(接口聲明)
**************.def 模塊定義 (.Def) 文件(鏈接時使用)參考:模塊定義 (.Def) 文件
2、編輯CMakelist.txt文件構建工程
請參考: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的差異有些非常大,跨平臺的工程注意兼容性