cmake使用和引數分析

2021-10-19 03:44:22 字數 3229 閱讀 2739

cmake入門實戰

使用 cmake 進行交叉編譯

cmake 編譯選項設定

cmake時新增-fpic編譯選項

project_source_dir 工程的根目錄

project_binary_dir 執行cmake命令時所在的目錄

cmake_include_path 環境變數

cmake_library_path

cmake_current_source_dir 當前在處理的cmakelists.txt所在目錄

cmake_current_binary_dir target編譯目錄

cmake_current_list_file 呼叫這個變數的cmakelists.txt所在的完整路徑

cmake_current_source_dir cmakelists.txt所在的完整路徑

# 設定編譯模式,debug/release

set(cmake_build_type "debug"

)# debug/release的編譯選項

set(cmake_cxx_flags_debug "$env -o0 -wall -g -ggdb"

)set(cmake_cxx_flags_release "$env -o3 -wall"

)# 也可以直接設定編譯選項

set(cmake_cxx_flags ...)

巨集:-d 在命令列使用-d定義巨集,在cmakelists.txt裡面可以用set定義巨集

cmake_cxx_compiler 指定c++編譯工具

cmake_cxx_flags 指定c++編譯引數,

cmake_c_compiler 指定c編譯工具

cmake_c_flags 指定c編譯引數,相當於cflags

cmake_toolchain_file 指定cmake檔案,這個檔案可以定義一系列的cmake_字首變數

cmake_install_prefix 指定cmkae的安裝目錄(make install)

cmake_cxx_standard 指定g++的標準,用set的時候類似 –std=c++11

cmake_c_standard指定gcc的標準,用set的時候類似 –std=c11

executable_output_path 指定exe檔案最終輸出資料夾

library_output_path 指定lib檔案最終輸出資料夾

findpackage()

add_definitions()

新增編譯選項,多個可以用空格隔開,實際上可以用它來新增巨集定義,新增-std=c++11/c11

add_compile_options(-std=c++11)

新增編譯選項(gcc和g++都新增),類似cmake_cxx_flags和cmake_c_flags,

set()

設定乙個變數,也可以用來定義巨集,也可以定義其他的環境變數

add_dependencies(taget depend1 …)

給目標新增依賴,在編譯目標前會先編譯被依賴的目標,多個依賴用空格分開

aux_source_directory(dirname arg)

把指定資料夾下所有的源檔名列表加入到指定變數中

include(file)

匯入其他cmakelists.txt檔案

install()

安裝,與cmake_install_prefix有關

關鍵字:

and/or/not

cmake版本要求

cmake_minimun_required(version version)

新增乙個可執行檔案編譯目標

add_executable(target sourcefile …)

新增乙個動態/靜態庫的編譯目標

add_library(target shared/static sourcefile …)

給編譯目標鏈結庫

target_link_libraries(target –l*** …)

設定變數(可以用這種方法定義巨集,只針對巨集有內容情況)

set(arg content)

例:set(executable_output_path dirname) 指定exe檔案最終的輸出路徑

set(library_output_path dirname) 指定lib檔案最終的輸出路徑

這2個設定一般是緊緊跟隨同乙個cmakelists.txt檔案的add_executable()/add_library()

定義巨集,格式跟命令列一樣

add_definitions

(命令列定義巨集樣式)

例如:add_definitions(-ddebug)

包含子目錄(包含子目錄的cmakelists.txt檔案)

add_subdirectory

(dirmane)

指定標頭檔案掃瞄目錄

include_directories

(dirname)

指定庫掃瞄目錄

link_directories

(dirname)

訊息列印

message

(status msg)

11)file命令

file

(cmd filename arg1 arg2 ...

)

12)在目錄中查詢所有原始檔,檔案列表存在variable中

aux_source_directory

()

13)在目錄中掃瞄所有符合條件的檔案,glob只有本地有效,glob_recurse子檔案也有效

file(glob user_libs_path ./src/*.cpp)

file(glob_recurse user_libs_path ./src/*.cpp)

陣列引數 和 指標引數 分析

c語言中只會以值拷貝的方式傳遞引數,傳址呼叫本質上也是對位址值的傳遞。當向函式傳遞陣列時,將陣列名看做常量指標傳陣列首元素位址。c語言以高效為最初設計目標,在函式傳遞的時候如果拷貝整個陣列執行效率將大大下降,因此只傳遞首元素的位址。二維陣列引數同樣存在退化的問題,二維陣列可以看做是一維陣列,二維陣列...

25 陣列引數和指標引數分析

目錄c 語言以高效作為最初設計目標 二維陣列引數中第一維的引數可以省略 void f int a 5 void f int a void f int a void g int a 3 3 void g int a 3 void g int a 3 等價關係 陣列退化後,所退化的指標必須能指向原陣列中...

SFDR 引數分析

sfdr是訊號系統處理中常用的一項引數,對於評估系統的雜訊水平和adc dac的效能有一定參考意義。sfdr,英文全稱是 spurious free dynamic range,意為無雜散動態範圍。sfdr是指基波強度與最大雜波或諧波的強度之比,所以sfdr值越大則說明系統的雜訊水平越低,靈敏度越高...