<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    cmake 學習筆記(二)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 在 Cmake學習筆記一 中通過一串小例子簡單學習了cmake 的使用方式。

    這次應該簡單看看語法和常用的命令了。

    簡單的語法

    • 注釋
    # 我是注釋
    • 命令語法
    COMMAND(參數1 參數2 ...)
    • 字符串列表
    A;B;C # 分號分割或空格分隔的值
    • 變量(字符串或字符串列表)

    set(Foo a b c)

    設置變量 Foo

    command(${Foo})

    等價于 command(a b c)

    command("${Foo}")

    等價于 command("a b c")

    command("/${Foo}")

    轉義,和 a b c無關聯

    • 流控制結構
    IF()...ELSE()/ELSEIF()...ENDIF()
    WHILE()...ENDWHILE()
    FOREACH()...ENDFOREACH()
    • 正則表達式

    部分常用命令

    INCLUDE_DIRECTORIES( "dir1" "dir2" ... )

    頭文件路徑,相當于編譯器參數 -Idir1 -Idir2

    LINK_DIRECTORIES("dir1" "dir2")

    庫文件路徑。注意:
    由于歷史原因,相對路徑會原樣傳遞給鏈接器。
    盡量使用FIND_LIBRARY而避免使用這個。

    AUX_SOURCE_DIRECTORY( “sourcedir” variable)

    收集目錄中的文件名并賦值給變量

    ADD_EXECUTABLE

    可執行程序目標

    ADD_LIBRARY

    庫目標

    ADD_CUSTOM_TARGET

    自定義目標

    ADD_DEPENDENCIES( target1 t2 t3 )

    目標target1依賴于t2 t3

    ADD_DEFINITIONS( "-Wall -ansi")

    本意是供設置 -D... /D... 等編譯預處理需要的宏定義參數,對比 REMOVE_DEFINITIONS()

    TARGET_LINK_LIBRARIES( target-name lib1 lib2 ...)

    設置單個目標需要鏈接的庫

    LINK_LIBRARIES( lib1 lib2 ...)

    設置所有目標需要鏈接的庫

    SET_TARGET_PROPERTIES( ... )

    設置目標的屬性 OUTPUT_NAME, VERSION, ....

    MESSAGE(...)

     

    INSTALL( FILES “f1” “f2”DESTINATION . )

    DESTINATION 相對于 ${CMAKE_INSTALL_PREFIX}

    SET( VAR value [CACHE TYPE DOCSTRING [FORCE]])

     

    LIST( APPEND|INSERT|LENGTH|GET| REMOVE_ITEM|REMOVE_AT|SORT ...)

    列表操作

    STRING( TOUPPER|TOLOWER|LENGTH| SUBSTRING|REPLACE|REGEX ...)

    字符串操作

    SEPARATE_ARGUMENTS( VAR )

    轉換空格分隔的字符串到列表

    FILE( WRITE|READ|APPEND|GLOB| GLOB_RECURSE|REMOVE|MAKE_DIRECTORY ...)

    文件操作

    FIND_FILE

    注意 CMAKE_INCLUDE_PATH

    FIND_PATH

    注意 CMAKE_INCLUDE_PATH

    FIND_LIBRARY

    注意 CMAKE_LIBRARY_PATH

    FIND_PROGRAM

     

    FIND_PACKAGE

    注意 CMAKE_MODULE_PATH

    EXEC_PROGRAM( bin [work_dir] ARGS <..> [OUTPUT_VARIABLE var] [RETURN_VALUE var] )

    執行外部程序

    OPTION( OPTION_VAR “description” [initial value] )

     

    變量

    工程路徑

    • CMAKE_SOURCE_DIR
    • PROJECT_SOURCE_DIR
    • <projectname>_SOURCE_DIR

    這三個變量指代的內容是一致的,是工程頂層目錄

    • CMAKE_BINARY_DIR
    • PROJECT_BINARY_DIR
    • <projectname>_BINARY_DIR

    這三個變量指代的內容是一致的,如果是in source編譯,指得就是工程頂層目錄,如果 是out-of-source編譯,指的是工程編譯發生的目錄

    • CMAKE_CURRENT_SOURCE_DIR

    指的是當前處理的CMakeLists.txt所在的路徑。

    • CMAKE_CURRRENT_BINARY_DIR

    如果是in-source編譯,它跟CMAKE_CURRENT_SOURCE_DIR一致,如果是out-ofsource 編譯,他指的是target編譯目錄。

    • CMAKE_CURRENT_LIST_FILE

    輸出調用這個變量的CMakeLists.txt的完整路徑

    CMAKE_BUILD_TYPE

    控制 Debug 和 Release 模式的構建

    • CMakeList.txt文件
    SET(CMAKE_BUILD_TYPE Debug)
    • 命令行參數
    cmake DCMAKE_BUILD_TYPE=Release

    編譯器參數

    • CMAKE_C_FLAGS
    • CMAKE_CXX_FLAGS

    也可以通過指令ADD_DEFINITIONS()添加

    CMAKE_INCLUDE_PATH

    • 配合 FIND_FILE() 以及 FIND_PATH() 使用。如果頭文件沒有存放在常規路徑(/usr/include, /usr/local/include等),

    則可以通過這些變量就行彌補。如果不使用 FIND_FILE 和 FIND_PATH的話,CMAKE_INCLUDE_PATH,沒有任何作用。

    • CMAKE_LIBRARY_PATH

    配合 FIND_LIBRARY() 使用。否則沒有任何作用

    • CMAKE_MODULE_PATH

    cmake 為上百個軟件包提供了查找器(finder):FindXXXX.cmake

    當使用非cmake自帶的finder時,需要指定finder的路徑,這就是CMAKE_MODULE_PATH,配合 FIND_PACKAGE()使用

    CMAKE_INSTALL_PREFIX

    控制make install是文件會安裝到什么地方。默認定義是/usr/local 或 %PROGRAMFILES%

    BUILD_SHARED_LIBS

    如果不進行設置,使用ADD_LIBRARY且沒有指定庫類型,默認編譯生成的庫是靜態庫。

    UNIX 與 WIN32

    • UNIX,在所有的類UNIX平臺為TRUE,包括OS X和cygwin
    • WIN32,在所有的win32平臺為TRUE,包括cygwin

    參考

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全