Cmake的 debug版本和release版本(轉)android
debug版本的項目生成的可執行文件須要有調試信息而且不須要進行優化,而release版本的不須要調試信息可是須要優化。這些特性在gcc/g++中經過編譯時的參數來決定的,若是將優化程度調到最高須要設置 -O3 ,最低的是 -O0 即不作優化,添加調試信息的參數是 -g -ggdb,若是不添加這個參數,調試信息就不會被包含在生成的二進制中
c++
CMake中有一個變量CMAKE_BUILD_TYPE,能夠取值枚舉入下:Debug Release RelWithDebInfo 和 MinSizeRelgit
當這個變量值爲Debug的時候,Cmake會使用變量CMAKE_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG中的字符串做爲編譯選項生成Makefile,
github
當這個變量值爲Release的時候,工程會使用變量CMAKE_CXX_FLAGS_RELEASE和CMAKE_CFLAGS_RELEASE選項生成Makefile。express
如今假設項目中只有一個文件main.cpp,下面是一個能夠選擇生成debug版和release版的程序的CMakeList.txt:
1 PROJECT(main)windows
2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)app
3 SET(CMAKE_SOURCE_DIR .)工具
45 SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")oop
6 SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")優化
78 AUX_SOURCE_DIRECTORY(. DIR_SRCS)
9 ADD_EXECUTABLE(main ${DIR_SRCS})
第 5 和 6 行設置了兩個變量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_RELEASE, 這兩個變量是分別用於 debug 和 release 的編譯選項。 編輯 CMakeList.txt 後須要執行 ccmake 命令生成 Makefile 。在進入項目的根目錄,輸入 "ccmake ." 進入一個圖形化界面,以下圖所示:
ccmake的界面
執行了configure後的ccmake的界面
下面咱們首先生成debug版的Makefile:將變量CMAKE_BUILD_TYPE設置爲Debug,按「c」進行configure,按「g」生成Makefile並推出。這時執行命令 find * | xargs grep 「O0」後結果以下:
執行命令 find * | xargs grep 「O0」後的結果
CMakeFiles/main.dir/flags.make:CXX_FLAGS = -O0 -Wall -g -ggdb CMakeFiles/main.dir/link.txt:/usr/bin/c++
-O0 -Wall -g -ggdb CMakeFiles/main.dir/main.cpp.o -o main -rdynamic
CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
這個結果說明生成的 Makefile 中使用了變量 CMAKE_CXX_FLAGS_DEBUG 做爲編譯時的參數。
下面咱們將生成Release版本的Makefile:再次執行「ccmake ." ,將變量CMAKE_BUILD_TYPE設置爲Release,生成Makefile並推出。執行命令 find * | xargs grep 「O0」後結果以下:
find * | xargs grep "O0"的執行結果
CMakeLists.txt:SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")而執行命令 find * | xargs grep "O3" 後結果以下:
CMakeCache.txt:CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUGCMakeCache.txt:CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUGCMakeFiles/main.dir/flags.make:CXX_FLAGS = -O3 -Wall CMakeFiles/main.dir/link.txt:/usr/bin/c++ -O3 -Wall CMakeFiles/main.dir/main.cpp.o -o main -rdynamic CMakeLists.txt:SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
這兩個結果說明生成的Makefile中使用了CMAKE_CXXFLAGS_RELEASE,做爲編譯時的參數
####################################################################################
在cmake中要編譯debug模式的話,在CMakeLists.txt中添加以下兩行
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ")
SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall")
而後,在編譯的時候,使用以下命令:
cmake -DCMAKE_BUILD_TYPE=Debug/Release path
第三個參數path是指項目的頂層路徑
1. cmake支持gdb的實現,
首先在CMakeLists.txt下加入
SET(CMAKE_BUILD_TYPE "Debug")
在下面加入:
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
緣由是CMake 中有一個變量 CMAKE_BUILD_TYPE ,能夠的取值是 Debug Release RelWithDebInfo >和 MinSizeRel。
當這個變量值爲 Debug 的時候,CMake 會使用變量 CMAKE_CXX_FLAGS_DEBUG 和 CMAKE_C_FLAGS_DEBUG 中的字符串做爲編譯選項生成 Makefile;
2. 在GDB中間加入程序啓動參數
好比咱們須要調試一個可執行文件./a.out help
這時
$gdb ./a.out
進入到gdb的命令行模式下,而後:
(gdb) set args help
就能加上可執行文件須要的參數,若是要看argc[1]到argc[N]的參數,只須要
(gdb) show args
3. gdb中查看字符串,地址的操做,數據類型
比始有一個int型的變量i,相要知道他的相關信息,能夠
(gdb) print i
打印出變量i的當前值
(gdb)x &i
與上面的命令等價。
若是有x命令看時,須要看一片內存區域,(若是某個地方的值爲0,用x時會自動截斷了)
(gdb) x/16bx address
單字節16進制打印address地址處的長度爲16的空間的內存,16表示空間長度,不是16進制,x表示16進制,b表示byte單字節
gdb看變量是哪一個數據類型
(gdb) whatis i
便可知道i是什麼類型的變量
####################################################################################
官方文檔https://cmake.org/cmake/help/v3.7/
CMake是一個跨平臺的安裝(編譯)工具,能夠用簡單的語句來描述全部平臺的安裝(編譯過程),輸出各類各樣的makefile或者project文件。CMake」這個名字是「cross platform make」的縮寫。
$> cmake ../sdk -Ddebug=ON
$> make
$> make install
第一條命令用於根據路徑../sdk下的CMakeLists.txt生成Makefile文件;第二條命令執行Makefile文件,編譯程序,生成可執行文件;第三條命令安裝生成的可執行文件。
#後面爲註釋的內容。
CMakeLists.txt中的命令能夠所有大寫,或者所有小寫。
# 指定工程名 e.g. 指定本工程的工程名爲test_math
project(test_math)
# 定義變量 e.g. 定義SLNDIR變量,變量值爲../../。變量的使用方法爲${variable name}
set(SLNDIR ../../)
# 從文件加載CMake命令 e.g. 加載../../prj.mak/sp.cmake文件的全部命令
include(${SLNDIR}prj.mak/sp.cmake)
# 添加包含路徑,編譯器能這些路徑中尋找頭文件 e.g. 添加兩個路徑
include_directories (${SLNDIR}src/include ${SLNDIR}src/3rd/include )
# 添加可執行文件。從源文件source1, source2...生成可執行文件name
add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
# 添加庫。從源文件source1, source2...生成庫name(靜態庫,動態庫)
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
# 顯示信息
message([<mode>] "message to display" ...)
# 添加build子文件夾。告訴CMake執行source_dir下的 CMakeLists.txt文件,編譯source_dir中的源代碼
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
# 收集全部的源文件。將dir路徑下的全部源文件都存儲在variable中
aux_source_directory(<dir> <variable>)
# 設置連接庫的搜索路徑。至關於gcc中的-L(大寫L)
Specify directories in which the linker will look for libraries.
link_directories(directory1 directory2 ...)
# 設置連接庫。該命令以後的全部target都要連接該命令中設置的庫
Link libraries to all targets added later.
link_libraries([item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)
# 設置預編譯宏。e.g. Debug模式下add_definitions(-g -D_DEBUG); Release模式下add_definitions(-DNDEBUG -O2)
add_definitions(-DFOO -DBAR ...)
# 用戶可選擇的選項。
option(debug "is debug mode?" OFF).能夠經過-D選擇不一樣的選項。
如cmake ../source -Ddebug=ON;cmake ../source -Ddebug=OFF
option(<option_variable> "help string describing option" [initial value])
option_variable能夠經過${option_variable}進行訪問,其值爲ON或者OFF
# 設置變量,取消變量
set (CMAKE_DEBUG_POSTFIX "d")
#設置debug模式時,輸出產物名加後綴d
unset (CMAKE_DEBUG_POSTFIX)
# 取消CMAKE_DEBUG_POSTFIX變量的設置
# 邏輯判斷
if(<variable>)
if(NOT <expression>)
if(<expr1> AND <expr2>)
if(<expr1> OR <expr2>)
if(DEFINED <variable>)
if((expression) AND (expression OR (expression)))
if(<variable|string> MATCHES regex)if(<variable|string> LESS <variable|string>)if(<variable|string> GREATER <variable|string>)if(<variable|string> EQUAL <variable|string>)if(<variable|string> STRLESS <variable|string>)if(<variable|string> STRGREATER <variable|string>)if(<variable|string> STREQUAL <variable|string>)
cmake操做系統平臺的判斷
CMake注意事項:
1.使用set設置CMAKE_CXX_FLAGS等變量時不要覆蓋,儘可能保留系統默認的一些值,在這些值後面添加就好了。例如:
set(LOCAL_CXX_FLAGS "-fPIC -fPE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LOCAL_CXX_FLAGS}")
CMake調用openmp
交叉編譯
宿主機host是執行編譯、連接嵌入式軟件的計算機;
目標機target是運行嵌入式軟件的硬件平臺。
一般咱們用的PC機(window系統或者liunx系統)就是宿主機,
而客戶使用的車機(QNX系統)、手機(Andorid系統)則是目標機。
在宿主機host上要生成目標機target的程序就是交叉編譯。交叉編譯時須要修改如下內容:
Ø 修改編譯器;
Ø 修改依賴庫;
Ø 修改頭文件;
使用CMake進行交叉編譯就是要告訴CMake目標機target是什麼平臺、
使用什麼編譯器、
到哪裏尋找依賴庫、
到哪裏尋到頭文件。
CMake使用一些內建變量定義上述內容。
Ø CMAKE_SYSTEM_NAME: 即你目標機target所在的操做系統名稱,
好比ARM或者Linux你就須要寫"Linux",
若是Windows平臺你就寫"Windows",
若是你的嵌入式平臺沒有相關OS你即須要寫成"Generic",
只有當CMAKE_SYSTEM_NAME這個變量被設置了,
CMake才認爲此時正在交叉編譯,它會額外設置一個變量CMAKE_CROSSCOMPILING爲TRUE.
Ø CMAKE_C_COMPILER: 顧名思義,即C語言編譯器,
這裏能夠將變量設置成完整路徑或者文件名,
設置成完整路徑有一個好處就是CMake會去這個路徑下去尋找編譯相關的其餘工具好比linker,binutils等,
若是你寫的文件名帶有arm-elf等等前綴,
CMake會識別到而且去尋找相關的交叉編譯器。
Ø CMAKE_CXX_COMPILER: 同上,此時表明的是C++編譯器
Ø CMAKE_FIND_ROOT_PATH: 表明了一系列的相關文件夾路徑的根路徑的變動
Ø CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:
對FIND_PROGRAM()起做用,有三種取值,NEVER,ONLY,BOTH,
第一個表示不在你CMAKE_FIND_ROOT_PATH下進行查找,
第二個表示只在這個路徑下查找,
第三個表示先查找這個路徑,再查找全局路徑,
對於這個變量來講,通常都是調用宿主機的程序,
因此通常都設置成NEVER
Ø CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:
對FIND_LIBRARY()起做用,表示在連接的時候的庫的相關選項,
所以這裏須要設置成ONLY來保證咱們的庫是在交叉環境中找的.
Ø CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:
對FIND_PATH()和FIND_FILE()起做用,通常來講也是ONLY
與交叉編譯相關的這些變量如何傳遞給CMake了?最爲方便的一個方法就是將相關的變量設置都放進一個文件(cmake腳本)中去,而後將該文件經過CMAKE_TOOLCHIAIN_FILE傳遞給CMake, 例如:
cmake-DCMAKE_TOOLCHIAIN_FILE="/path/to/toolchain-file" ..
# this one is important
SET(CMAKE_SYSTEM_NAMELinux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
# specify the crosscompiler
SET(CMAKE_C_COMPILER /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER/opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++)
# where is the targetenvironment
SET(CMAKE_FIND_ROOT_PATH /opt/eldk-2007-01-19/ppc_74xx/home/alex/eldk-ppc74xx-inst)
# search for programs inthe build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)
# for libraries and headersin the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
使用CMake交叉編譯Android平臺上的程序,就須要:
Ø 指明目標平臺爲Android
Ø 指明目標硬件是ARM仍是X86
Ø 指明ndk level version
Ø 用ndk提供的編譯器
Ø 從ndk安裝目錄搜尋依賴庫和頭文件
咱們能夠本身動手編寫toolchain-file,設置相應的變量。這也比較麻煩。
幸運的是,咱們有Android-cmake項目能夠幫忙。該項目生成了一個名爲android.toolchain.cmake的toolchain-file文件,該文件幫咱們設置了大部分的變量。咱們須要作的就是指定cmake的toolchain file爲這個項目裏面的android.toolchain.cmake文件,而後設置好Android NDK路徑便可。
# Usage Linux:
export ANDROID_NDK=/absolute/path/to/the/android-ndk
mkdir build && cdbuild
cmake-DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake ..
make -j8
make install
# Usage Windows:
SETANDROID_NDK=C:\absolute\path\to\the\android-ndk
mkdir build && cdbuild
cmake.exe -G"MinGWMakefiles" ^
-DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake ^
-DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe"^
..
cmake.exe --build . --target install--clean-first
注意:此附錄僅爲beta版本,有些條目是推導出來的。
http://blog.csdn.net/xum2008/article/details/7268761
Visual Studio | Cmake | ||
Project Reference | add_dependencies() | ||
General/Output Directory | |||
Debugging/Working Directory | CMAKE can’t set this value, because the info not stored in project file but some intermedia file generated by visual studio | ||
c/c++ | General | Additional Include Directories | include_directories() |
Resolve #using References | Don’t know | ||
Debug Information Format | CMAKE FAQ set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") Change the default flags for specific config. |
||
Common language runtime support | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/clr」) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/clr:pure」) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/clr:safe」) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/clr:oldSynax」) |
||
Suppress Startup Banner | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/nologo」 ) | ||
Warning Level | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/W0」 ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/W1」 ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/W2」 ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/W3」 ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/W4" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Wall」 ) |
||
Treat Warnings As Errors | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/WX-" ) #No set_target_properties( target PROPERTIES COMPILE_FLAGS 「/WX" ) #Yes |
||
Multi-processor Compilation | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/MP" ) #Yes #Don’t set means No |
||
Use Unicode For Assembler Listing | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/FAu" ) #yes #Don’t set means no |
||
Optimization | Optimization | set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT/O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2/Ob2 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") Change the default flags for specific config. |
|
Inline Function Expansion | set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") Change the default flags for specific config. |
||
Enable Intrinsic Functions | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Oi" ) #yes #Don’t set means no |
||
Favor Size or Speed | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Os" ) #size set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Ot" ) #speed #Don’t set means neither |
||
Omit Frame Pointers | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Oy-" ) #no set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Oy" ) #yes |
||
Enable Fiber-safe Optimizations | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GT" ) #yes #not setting means no |
||
Whole Program Optimization | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GL" ) #yes #not setting means no |
||
Preprocessor | Preprocessor Definitions | set_target_properties( target PROPERTIES COMPILE_DEFINITIONS DEFNAME=DEFVAL ) set_source_files_properties( filename.cpp PROPERTIES COMPILE_DEFINITIONS DEFNAME=DEFVAL ) |
|
Undefine Preprocessor Definitions | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/UDEFNAME" ) | ||
Undefine All Preprocessor Definitions | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/u" ) | ||
Ignore Standard Include Path | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/X" ) | ||
Preprocess to a File | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/P" ) | ||
Preprocess Suppress Line Numbers | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/EP" ) | ||
Keep Comments | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/C" ) | ||
Code Generation | Enable String Pooling | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GF" ) #yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GF-" ) #no |
|
Enable Minimum Rebuild | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Gm" ) #yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Gm-" )#no |
||
Enable C++ Exceptions | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/EHsc" ) #yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/EHa" ) #yes, with SEH exceptions set_target_properties( target PROPERTIES COMPILE_FLAGS 「/EHs" ) #yes, with extern C functions #not setting means no |
||
Smaller Type Check | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/RTCc" ) #yes #not setting means no |
||
Basic Runtime Checks | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/RTCs" ) #Stack frame check set_target_properties( target PROPERTIES COMPILE_FLAGS 「/RTCu" ) #Uninitialized Variable set_target_properties( target PROPERTIES COMPILE_FLAGS 「/TRC1" ) #Both #not setting means no |
||
Runtime Library | CMAKE FAQ set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG/MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT/O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") Change the default flags for specific config. |
||
Struct Member Alignment | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zp1" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zp2" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zp4" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zp8" )set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zp16" ) |
||
Buffer Security Check | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GS" ) #yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GS-" ) #no |
||
Enable Function-Level Linking | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Gy" ) #yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Gy-" ) #no |
||
Enable Enhaunced Instruction Set | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/arch:SSE" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/arch:SSE2" ) |
||
Floating Point Model | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/fp:precise" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/fp:strict" ) set_target_properties( target PROPERTIES COMPILE_FLAGS 「/fp:fast" ) |
||
Enable Floating Point Exceptions | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/fp:except" ) | ||
Create Hotpatchable Image | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/hotpatch" ) | ||
Language | Disable Language Extensions | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Za" ) | |
Treat Wchar_t As Built in Type | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zc:wchar_t" )#yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/Zc:wchar_t-" ) #no |
||
Force Conformance in For Loop Scope | |||
Enable Run-Time Type Information | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GR" ) #yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/GR-" ) #no |
||
Open MP Support | set_target_properties( target PROPERTIES COMPILE_FLAGS 「/openmp" )#yes set_target_properties( target PROPERTIES COMPILE_FLAGS 「/openmp-" )#no |
||
PreCompiled Header | PreCompiled Header | set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yc" ) #create set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yu" ) #use #not setting means no |
|
PreCompiled Header File | set_target_properties( target PROPERTIES COMPILE_FLAGS "/Ycstdafx.h" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yustdafx.h" ) |
||
Precompiled Header output File | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FpPathAndName.pch" ) | ||
Output Files | Expand Attributed Source | set_target_properties( target PROPERTIES COMPILE_FLAGS "/Fx" ) | |
Assembler Output | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FA" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAc" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAs" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAcs" ) #not setting means no list |
||
ASM List Location | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FaDebug" ) | ||
Object File name | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FoName.obj" ) | ||
Program DataBase File Name | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FdC:/Debug/good.pdb" ) | ||
Generate XML Documentation Files | set_target_properties( target PROPERTIES COMPILE_FLAGS "/doc" ) | ||
XML Documentation Filename | set_target_properties( target PROPERTIES COMPILE_FLAGS "/docDocument.xml" ) | ||
Browse Information | Enable Browse Information | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FR" ) | |
Browse Information File | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FRfilename" ) | ||
Advanced | Calling Convention | set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gd" ) #_cdecl set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gr" ) #_fastcall set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gz" ) #_stdcall |
|
Compile As | set_target_properties( target PROPERTIES LINKER_LANGUAGE "CXX" ) #C++ set_target_properties( target PROPERTIES LINKER_LANGUAGE "C" ) #C or set_target_properties( target PROPERTIES COMPILE_FLAGS "/TP" ) #CXX set_target_properties( target PROPERTIES COMPILE_FLAGS "/TC" ) #C |
||
Disable Specific Warnings | set_target_properties( target PROPERTIES COMPILE_FLAGS "/wd4710" ) | ||
Forced Include File | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FIinclude.h" ) | ||
Forced #using File | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FUname" ) | ||
Show Includes | set_target_properties( target PROPERTIES COMPILE_FLAGS "/showIncludes" ) | ||
Use full Paths | set_target_properties( target PROPERTIES COMPILE_FLAGS "/FC" ) | ||
Omit Default Library name | set_target_properties( target PROPERTIES COMPILE_FLAGS "/ZI" ) | ||
Internal Compiler Error Reporting | set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:queue" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:none" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:prompt" ) set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:send" ) |
||
Treat Specific Warnings as Errors | Don't know | ||
Linker | General | Output File | #normal case set_target_properties( target PROPERTIES OUTPUT_NAME "Helloworld" ) set_target_properties( target PROPERTIES PREFIX "lib" ) set_target_properties( target PROPERTIES SUFFIX "lib" ) #for debug version set_target_properties( target PROPERTIES DEBUG_OUTPUT_NAME "Helloworld" ) set_target_properties( target PROPERTIES DEBUG_PREFIX "lib" ) set_target_properties( target PROPERTIES DEBUG_SUFFIX "lib" ) #For dlls set_target_properties( target PROPERTIES OUTPUT_NAME "Helloworld" ) set_target_properties( target PROPERTIES IMPORT_PREFIX "lib" ) set_target_properties( target PROPERTIES IMPORT_SUFFIX "lib" ) set_target_properties( target PROPERTIES PREFIX "bin" ) set_target_properties( target PROPERTIES SUFFIX "dll" ) #output path |
Show Progress | set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE" ) set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:Lib" ) set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:ICF" ) set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:REF" ) set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:SAFESEH" ) set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:CLR" ) #not setting means no |
||
Version | set_target_properties( target PROPERTIES VERSION 0.1.2.3) | ||
Enable Incremental Linking | set_target_properties( target PROPERTIES LINK_FLAGS "/INCREMENTAL" ) set_target_properties( target PROPERTIES LINK_FLAGS "/INCREMENTAL:NO" ) set( CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL" ) set( CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO" ) |
||
Suppress Startup Banner | set_target_properties( target PROPERTIES LINK_FLAGS "/NOLOGO" ) | ||
Ignore Import Library | Don't know | ||
Register Output | Don't know | ||
Per-user Redirection | Don't know | ||
Additional Library Directories | link_directories( dir1 dir2 ) set_target_properties( target PROPERTIES LINK_FLAGS "/LIBPATH:dir1 /LIBPATH:dir2" ) |
||
Link Library Dependencies | Don't know | ||
Use Library Dependency Inputs | Don't know | ||
Link Status | set_target_properties( target PROPERTIES LINK_FLAGS "/LTCG:STATUS" ) set_target_properties( target PROPERTIES LINK_FLAGS "/LTCG:NOSTATUS" ) |
||
Prevent DLL Binding | set_target_properties( target PROPERTIES LINK_FLAGS "/ALLOWBIND:NO" ) set_target_properties( target PROPERTIES LINK_FLAGS "/ALLOWBIND:YES" ) |
||
Treat Linker Warnings As Errors | set_target_properties( target PROPERTIES LINK_FLAGS "/WX" ) | ||
Force File Output | set_target_properties( target PROPERTIES LINK_FLAGS "/FORCE" ) | ||
Create Hot Patchable Image | set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN" ) set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:16" ) #Itanium only set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:6" ) #x64 only set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:5" ) #x86 only |
||
Specify Section Attributes | Don't know | ||
Input | Additional Dependancies | target_link_libraries( target item1 item2 ) | |
Ignore All Default Libraries | set_target_properties( target PROPERTIES LINK_FLAGS "/NODEFAULTLIB" ) | ||
Put files into folders | source_group( header FILES includeme.h ) |