實際使用過程中,尤其是嵌入式開發中,經常需要使用到交叉編譯,這時就要將系統預設編譯器切換到相對應的使用到的編譯器,常用的編譯器設定主要由一下幾種方法:
1:修改系統環境
變數,修改預設編譯器為需要使用到的編譯器
export其中cccc=<
c編譯器
>
cxx=<
c++編譯器
>
是設定gcc
編譯器,而
cxx是設定
g++編譯器,
可以帶絕對
路徑。
該方法缺點
:會影響整個系統預設
編譯器,使用完成之後需要恢復。 2:
cmake
-d命令設定編譯器
通過cmake命令列,在執行時,使用
-d 設定
cmake_foo_compiler
變數值為有效的編譯器名稱或者全
路徑。
cmake3:使用cmake set命令設定-d cmake_c_compiler
=<
c編譯器
>
cmake_cxx_compiler
==<
c++編譯器
>
使用set命令在cmakelist.txt設定cmake__
compile
系列變數指定編譯器: 例如
設定c
及c++
編譯器:
set(cmake_c_compiler 「通過設定cmake_c_compiler和cmake_cxx_compiler變數強制修改編譯器。編譯器絕對路徑」)
set(cmake_cxx_compiler 「
編譯器絕對路徑」)
實際構建編譯系統是,經常需要對編譯器設定各種各樣編譯器選項,cmake中主要由以下幾種方法設定:
1:使用cmake set命令設定
可以使用
set命令設定
cmake_>_
flags
系列指定編譯器選項:
set(cmake_c_flags由於上述變數為cache變數,故全域性有效,包括編譯鏈結階段,可以分別針對c/c++進行設定編譯器選項)
set(cmake_cxx_flags
編譯器選項)
2:add_definitions命令
add_definition命令針對的是編譯選項中的-d自定義編譯選項,例如自定義編譯選項foo 和bar, 可以使用如下命令
add_definitions該命令的有效範圍僅在當前目錄或者當前(-dfoo -dbar ...)
目錄以下的
目錄。
該命令設定之後,會對c和c++編譯器都有效。
3:add_compile_option命令
add_compile_option命令可以針對自定義編譯選項和標準編譯器選項flag:
add_compile_options有效範圍為 在當前目錄或者當前(...)
目錄以下的目錄。該命令
只在編譯階段不影響鏈結階段。
可以使用標準和非標準編譯選項,同樣也會新增到所有編譯器選項中。
例如:
add_definitions(-4:tstd=
c++11
)
arget_compile_definitions命令
該命令主要是針對target有效,命令列格式為:
target_compile_definitions(
<
inte***ce|public|private> [items1...]
[[items2...] ...])
必須是
add_executable
() 或者
add_library
() 建立,影響編譯階段不影響鏈結階段。
會新增所有編譯器選項。
inte***ce|public|private
為不同作用域
private新增頭檔案目錄主要由以下幾種方法和 public
項將產生
的 compile_definitions 屬性。
public
和 inte***ce
項將產生
的inte***ce_compile_definitions
屬性
1:通過編譯選項
–i 指定頭檔案目錄
2:通過
include_directories
指令
include_directories該命令有效範圍為在當前目錄或者當前([after|before] [system] dir1 [dir2
...])
目錄以下的目錄。該命令
只在編譯階段不影響鏈結階段。
3:通過
target_include_directories
指令
target_include_directories生成動態或者靜態庫主要使用([system] [before]
[items1...]
[[items2...] ...])
add_library
命令
add_library其中([static | shared | module]
[exclude_from_all]
[source1] [source2 ...])
ø static
:生成靜態庫 ø
shared:
生成動態庫 ø
module: 一
種不會被鏈結到其它目標中的外掛程式,但是可能會在執行時使用
dlopen
-系列的函式
新增第三方庫主要由以下幾種方法:
1:設定編譯器選項通過
-l<
庫名》 2:
使用target_link_libraries
target_link_libraries例如:(... ... ...)
target_link_libraries3:使用link_libraries命令字段(myproject
comm
)
# 連線
libhello.so
庫,預設優先鏈結動態庫
target_link_libraries
(myproject
libcomm.a
) #
顯示指定鏈結靜態庫
target_link_libraries
(myproject
libcomm.so) # 顯示指定鏈結動態庫
link_libraries新增 第三方庫是經常需要新增第三方庫路徑,以能夠鏈結到相應的第三方庫([item1 [item2 [...]]]
[[debug|optimized|general
] ] ...)
新增第三方庫主要由以下幾種方法:
1: 設定編譯器選項通過
-l<
庫名》2:使用link_directories命令字段
link_directories([after|before] directory1 [directory2 ...])
《mastering cmake》
專案構建工具介紹(推薦使用cmake)
cmakelists.txt檔案,個人感覺是最好用的工具,支援多種ide的專案構建,而且vscode上面有相關外掛程式支援命令提示 project test aux source directory src code add executable test cmake多個編譯同時編譯可能不穩定,會出...
cmake簡單入門2
cmake 最低版本要求 cmake minimum required version 2.8 專案名稱 project main 是否使用自己的 tools 庫 option use mymath use provided math implementation on 是否加入 mathfunct...
cmake使用範例
cmake作為一款跨平台的專案構建工具,其使用範圍已經越來越廣,本文以實際專案為例,展示乙個使用該編譯工具的模板。希望我們都能在這些高效的工具幫助下都享受程式設計的樂趣。project src libs modules includes build bin cmakelists 根目錄下cmakel...