国产精品天天看大片特色视频_麻豆文化传媒精品一区二区_亚洲精品在线观看视频_精品国产三上悠亚在线观看

VS Code / CMake創(chuàng)建嵌入式Linux C/C++應用

 2023-3-8              

VS Code是目前最流行的C/C++程序開發(fā)環(huán)境之一,利用VS CodeCMake工程模式的支持,創(chuàng)建面向嵌入式Linux平臺的C/C++應用,對工程管理非常方便,值得對此作專門的介紹(以下介紹以英創(chuàng)的嵌入式主板ESM7000為例)。本文已假設VS CodeC/C++插件、CMake插件均已正確安裝在開發(fā)主機Linux / Ubuntu環(huán)境中。

 

創(chuàng)建基本的工程目錄

Terminal窗口,創(chuàng)建一個測試精簡ISA總線的project目錄(test_isa):

xps15:~/esm7000/app$ mkdir test_isa

 

拷貝兩個基本配置文件,文件environment-setup-cortexa7hf-neon-poky-linux-gnueabi是交叉編譯工具路徑下的配置腳本文件,它包含了交叉編譯工具鏈的安裝路徑信息;文件esm7000_toolchain.cmake是面向交叉編譯工具的CMake描述文件,包含在英創(chuàng)的主板資料中。用于CMake Configure。這樣在<test_isa>目錄下可看到2個配置文件如下:

xps15:~/esm7000/app/test_isa$ ls -l
-rw-r--r-- 1 … 3441 Mar  6 10:17 environment-setup-cortexa7hf-neon-poky-linux-gnueabi
-rw-r--r-- 1 … 1895 Mar  6 10:17 esm7000_toolchain.cmake

 

Terminal窗口運行source交叉編譯工具,然后啟動vscode:

xps15:~/esm7000/app/test_isa$ source environment-setup-cortexa7hf-neon-poky-linux-gnueabi
xps15:~/esm7000/app/test_isa$ code .

 

VSCODE插件(Extension)的功能,都是通過命令來操作配置的,命令的啟動方式一般為:Ctrl-Shft-P -> <命令關鍵詞>….,我們常用的命令有C/C++CMake等。進入VS Code后,首先需要創(chuàng)建CMake配置:Ctrl-Shft-P -> CMake: Quick Start,選擇kit -> GCC 6.2.0 arm-poky-linux-gnueabi

cmake-kit.png

 

選擇工程名稱test_isa,生成代碼類型為Executable

cmake-project-name.png

 

于是,vscode會自動生成CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.0.0)
project(test_isa VERSION 0.1.0)
 
include(CTest)
enable_testing()
 
add_executable(test_isa main.cpp)
 
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)


為CMake配置交叉編譯工具

這時,需要把交叉編譯工具聯入CMakeconfigure中,方法是File -> Preferences -> Settings -> Workspace -> Extensions -> CMake Tools,在CMake: Configure Args添加:

cmake-configure-args.png

 

上述操作會讓vscode在工程的.vscode隱含目錄下創(chuàng)建settings.json如下:

{
    "cmake.configureArgs": [
        "-DCMAKE_TOOLCHAIN_FILE=${workspaceFolder}/esm7000_toolchain.cmake"
    ]
}


運行CMake命令,Ctrl-Shft-P -> CMake: Delete Cache and Reconfigure,就可從VS CodeOUTPUT窗口(在下方)的CMake Configure信息:

[main] Configuring project: test_isa
[driver] Removing /home/x10/esm7000/app/test_isa/build/CMakeCache.txt
[driver] Removing /home/x10/esm7000/app/test_isa/build/CMakeFiles
[proc] Executing command: /usr/bin/cmake --no-warn-unused-cli -DCMAKE_TOOLCHAIN_FILE=/home/x10/esm7000/app/test_isa/esm7000_toolchain.cmake -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_C_COMPILER:FILEPATH=/home/x10/esm7000/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER:FILEPATH=/home/x10/esm7000/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -S/home/x10/esm7000/rootfs/usr/app/test_isa -B/home/x10/esm7000/rootfs/usr/app/test_isa/build -G "Unix Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The C compiler identification is GNU 6.2.0
[cmake] -- The CXX compiler identification is GNU 6.2.0
[cmake] -- Check for working C compiler: /home/x10/esm7000/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
[cmake] -- Check for working C compiler: /home/x10/esm7000/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc -- works
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - done
[cmake] -- Detecting C compile features
[cmake] -- Detecting C compile features - done
[cmake] -- Check for working CXX compiler: /home/x10/esm7000/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++
[cmake] -- Check for working CXX compiler: /home/x10/esm7000/toolchain/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++ -- works
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Detecting CXX compile features
[cmake] -- Detecting CXX compile features - done
[cmake] -- Configuring done
[cmake] -- Generating done
[cmake] -- Build files have been written to: /home/x10/esm7000/app/test_isa/build
[cmakefileapi-driver] This version of CMake does not support the "toolchains" object kind. Compiler paths will be determined by reading CMakeCache.txt.

CMake配置成功后,點擊VS Code下方狀態(tài)欄上的Build鍵,即可對應用進行交叉編譯:

[main] Building folder: test_isa
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/x10/esm7000/app/test_isa/build --config Debug --target all -j 10 --
[build] Scanning dependencies of target test_isa
[build] [ 50%] Building CXX object CMakeFiles/test_isa.dir/main.cpp.o
[build] [100%] Linking CXX executable test_isa
[build] [100%] Built target test_isa
[build] Build finished with exit code 0


當然,也可切換到Release模式進行Build

 

添加實際的應用代碼

拷貝之前已經過驗證的test_isa的相關代碼到~/esm7000/app/test_isa/路徑下,并把source code文件加入CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0)
set(PRJNAME test_isa)
project(${PRJNAME} VERSION 0.2.0)
 
# Set the variable CMAKE_CXX_STANDARD to 11
# and the variable CMAKE_CXX_STANDARD_REQUIRED to True
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
 
# Use configure_file to configure and copy UserConfig.h.in to UserConfig.h
configure_file(UserConfig.h.in UserConfig.h)
 
include(CTest)
enable_testing()
 
set(SOURCEFILES test_isa.cpp isa_api_v3.cpp isa_dma_ext.cpp isa_dma_mmap.cpp)
add_executable(${PRJNAME} ${SOURCEFILES})
 
# Use target_include_directories to include ${PROJECT_BINARY_DIR}
target_include_directories(${PRJNAME} PRIVATE ${PROJECT_BINARY_DIR})
 
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)


點擊Build進行編譯,可看到多個cpp文件均被正常編譯:

[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/x10/esm7000/app/test_isa/build --config Release --target all -j 10 --
[build] Scanning dependencies of target test_isa
[build] [ 20%] Building CXX object CMakeFiles/test_isa.dir/isa_dma_ext.cpp.o
[build] [ 40%] Building CXX object CMakeFiles/test_isa.dir/isa_api_v3.cpp.o
[build] [ 60%] Building CXX object CMakeFiles/test_isa.dir/test_isa.cpp.o
[build] [ 80%] Building CXX object CMakeFiles/test_isa.dir/isa_dma_mmap.cpp.o
[build] [100%] Linking CXX executable test_isa
[build] [100%] Built target test_isa
[build] Build finished with exit code 0


讓C/C++ IntelliSense正確感知

VS CodeC/C++插件可使編輯器正常感知包含在交叉編譯工具里面的目標運行環(huán)境。具體做法是通過C/C++命令來進行必要的設置:Ctrl-Shft-P -> C/C++: Edit Configure (UI)。設置完成后,VS Code會自動在.vscode路徑在生成c_cpp_properties.json如下:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${SDKTARGETSYSROOT}/usr/include/**"
            ],
            "defines": [
                "__ARM_PCS_VFP"
            ],
            "compilerPath": "${OECORE_NATIVE_SYSROOT}/usr/bin/arm-poky-linux-gnueabi/${CROSS_COMPILE}g++",
            "cStandard": "c17",
            "cppStandard": "c++14",
            "intelliSenseMode": "linux-gcc-arm",
            "configurationProvider": "ms-vscode.makefile-tools",
            "compilerArgs": [
                "-march=armv7ve",
                "-mfpu=neon ",
                "-mfloat-abi=hard ",
                "-mcpu=cortex-a7 ",
                "--sysroot=${SDKTARGETSYSROOT}"
            ]
        }
    ],
    "version": 4
}


正確配置目標運行環(huán)境,使VS CodeEditor可正確索引頭文件內容,方便編程和調試。

 

小結

本文介紹了在VS Code環(huán)境下,為嵌入式Linux平臺創(chuàng)建CMake的工程的方法。其中重要的是操作順序:

1.       打開Terminal并轉至工程所在目錄

2.       Terminal命令行執(zhí)行source environment-setup…腳本,設置基本環(huán)境變量

3.       Terminal命令行執(zhí)行code . 啟動VS Code

順序之所以重要,是因為CMake kitesm7000_toolchain.cmake文件都依賴于交叉編譯工具鏈的環(huán)境變量。

英創(chuàng)的嵌入式主板產品ESM335xESM6800ESM6800HESM7000ESM8000等,采用不同的交叉編譯工具,它們的產品資料中都有各自對應的esm####_toolchain.cmake文件。可采用本文介紹的方法創(chuàng)建各自的CMake工程。

 

另外在WSL/Ubuntu環(huán)境,需要WSL下的CMake升級最新版本(目前是3.25.2),本文介紹的方法才能夠正常運行。

国产精品天天看大片特色视频_麻豆文化传媒精品一区二区_亚洲精品在线观看视频_精品国产三上悠亚在线观看
<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 久久精品盗摄| 国产综合色产| 欧美一区二区在线| 亚洲免费黄色| 1769国内精品视频在线播放| 国产精品免费观看在线| 欧美精品综合| 欧美激情免费观看| 免费一级欧美在线大片| 欧美在线视频免费播放| 午夜欧美不卡精品aaaaa| 一本久久综合| a91a精品视频在线观看| 91久久一区二区| 亚洲国产高清视频| 亚洲电影av在线| 伊人久久av导航| 狠狠色综合播放一区二区| 国产精品美女久久久久av超清| 欧美日韩人人澡狠狠躁视频| 麻豆九一精品爱看视频在线观看免费| 久久精彩免费视频| 久久精品系列| 麻豆精品网站| 欧美福利视频| 欧美日韩国产成人精品| 欧美精品aa| 欧美新色视频| 国产精品一区免费视频| 国产日韩欧美综合精品| 国产在线视频欧美| 在线观看精品| 日韩亚洲国产欧美| 亚洲亚洲精品三区日韩精品在线视频| 亚洲视频欧美视频| 欧美在线观看视频一区二区| 久久久蜜桃一区二区人| 欧美成人精品在线观看| 欧美激情一区三区| 国产精品久久久久久久7电影| 国产精品久久久久影院色老大| 国产精品影院在线观看| 精品成人a区在线观看| 亚洲国产精品久久| 一区二区三区www| 久久激情综合网| 欧美久久精品午夜青青大伊人| 欧美午夜精品久久久久久浪潮| 国产精品一区二区在线| 一区在线观看视频| 一本久久知道综合久久| 久久成年人视频| 国产精品综合色区在线观看| 欧美国产免费| 国产精品美女久久福利网站| 伊人久久大香线| 亚洲午夜在线观看视频在线| 久久精品国产91精品亚洲| 欧美激情一区二区三区四区| 国产精品久久久久毛片软件| 精品96久久久久久中文字幕无| 日韩一级黄色大片| 久久资源av| 国产精品视频久久| 亚洲精选视频免费看| 欧美专区18| 国产精品免费一区二区三区在线观看| 在线观看av一区| 欧美一区二区视频在线| 欧美精品亚洲精品| 在线日本高清免费不卡| 午夜久久久久久| 欧美日韩中文在线| 亚洲人成网站在线观看播放| 久久av免费一区| 国产精品一区二区三区乱码| 亚洲人成网站999久久久综合| 欧美一区二区三区婷婷月色| 欧美视频日韩| 亚洲日本成人网| 免费永久网站黄欧美| 国产专区一区| 欧美一区在线视频| 国产欧美日韩免费看aⅴ视频| 在线亚洲精品| 欧美日韩一级视频| 一区二区三区免费观看| 午夜视频在线观看一区| 欧美视频手机在线| 一级日韩一区在线观看| 欧美交受高潮1| 亚洲理论电影网| 欧美成人按摩| 亚洲激情精品| 欧美精品偷拍| 亚洲精品影视| 欧美日韩精品三区| 一区二区三区 在线观看视频| 欧美片第1页综合| 99精品国产在热久久婷婷| 欧美日韩精品一区二区天天拍小说| 亚洲激情网站免费观看| 欧美区一区二区三区| 99日韩精品| 国产精品无码永久免费888| 亚洲欧美日韩国产综合| 国产欧美日本一区视频| 久久久久一区二区三区| 亚洲承认在线| 欧美日韩一区二区三区| 久久精品国产清自在天天线| 欧美午夜大胆人体| 亚洲欧美乱综合| 黑人极品videos精品欧美裸| 久久亚洲国产成人| 亚洲精品免费在线播放| 国产精品高清网站| 久久精品亚洲精品国产欧美kt∨| 国内精品久久久久影院薰衣草| 免费一级欧美片在线播放| 99国产精品| 好吊色欧美一区二区三区四区| 噜噜噜在线观看免费视频日韩| 日韩午夜在线观看视频| 国产精品对白刺激久久久| 欧美在线综合视频| 日韩视频一区二区三区在线播放免费观看 | 这里只有精品电影| 国产精品一香蕉国产线看观看| 久久美女性网| 在线视频欧美日韩精品| 好吊一区二区三区| 欧美日韩午夜精品| 久久久久久国产精品一区| 亚洲视频导航| 在线欧美电影| 国产日韩欧美中文| 欧美日韩日日夜夜| 久久影音先锋| 欧美一区二区视频免费观看| 一本到高清视频免费精品| 国产主播喷水一区二区| 欧美日韩一区二区国产| 久久亚洲色图| 欧美一区二区三区四区在线观看地址| 亚洲国产清纯| 伊人精品成人久久综合软件| 国产精品久久久久久久9999| 免费国产自线拍一欧美视频| 欧美有码视频| 欧美一级免费视频| 中文精品一区二区三区| 亚洲国产成人精品久久| 国产午夜精品理论片a级探花| 欧美色欧美亚洲另类二区| 欧美激情在线免费观看| 久久综合狠狠| 久久精彩视频| 欧美专区日韩视频| 欧美一区二视频在线免费观看| 在线视频免费在线观看一区二区| 日韩视频免费大全中文字幕| 伊人伊人伊人久久| 黄色亚洲精品| 99精品欧美| 在线观看视频一区二区| 国产精品久久久久久久免费软件| 欧美激情精品久久久久久黑人| 美女视频网站黄色亚洲| 久久欧美中文字幕| 久久综合99re88久久爱| 久久精品国内一区二区三区| 欧美在线视频观看| 久久九九电影| 久久综合99re88久久爱| 美女精品国产| 欧美日韩国产a| 国产精品九九久久久久久久| 国产精品视频网| 国产欧美二区| 在线电影国产精品| 亚洲日本一区二区三区| 在线视频你懂得一区| 亚洲欧美韩国| 久久精品在线播放| 久久精品国产亚洲一区二区| 久久久久久久综合日本| 欧美国产在线视频| 国产精品国产三级国产a| 国产亚洲综合精品| 亚洲国产欧美不卡在线观看| 99re66热这里只有精品4| 中文高清一区| 久久男女视频| 欧美日韩精品久久| 国产日韩欧美高清免费| 亚洲国内在线| 欧美在线亚洲在线| 欧美日韩三区四区| 激情成人av|