linux下c++程式多檔案的編譯執行同樣有三種方法,使用g++命令,使用cmake,以及使用vscode外掛程式c/c++ program generator。
使用g++命令可以是我們了解編譯鏈結的過程,對從源**到可執行檔案的過程有乙個了解,有助於我們編寫一些vscode的js配置檔案,使用g++命令編譯執行多檔案的教程可以看這篇部落格:
大型工程一般都使用cmake編譯,cmake可以實現跨平台開發,同時,修改乙個檔案時,只需對該檔案進行編譯鏈結就可以了,不需要對其他未修改檔案編譯,可以節約時間。本文章重點介紹使用cmake和make進行c++開發。
使用vscode外掛程式c/c++ program generator進行開發可以檢視這篇部落格:
本篇部落格以乙個簡單的交換兩個數的類swap的程式為樣例,交換兩個數的程式的檔案結構如下:
build資料夾用來存放cmake產生的中間檔案,out用來存放輸出的可執行檔案。
樣例的源**如下:
#pragma once
#include class swap
void run();
void printinfo();
};
#include "swap.h"
void swap::run()
void swap::printinfo()
#include "swap.h"
int main()
1.1 重要指令
# cmake最小版本要求3.22.1
cmake_minimum_required (version 3.22.1)
# 指定工程名為helloworld
project(helloworld)
# 定義src變數,其值為main.cpp hello.cpp
set(src main.cpp hello.cpp)
# 將/usr/include/myincludefolder和./inculde新增到頭檔案搜尋路徑
include_directories(/usr/include/myincludefolder ./inculde)
# 將/usr/include/myincludefolder和./inculde新增到庫檔案搜尋路徑
link_directories(/usr/include/myincludefolder ./inculde)
# 通過變數 src 生成 libhello.so 共享庫
add_library(hello shared $)
# 新增編譯引數
add_compile_options(-wall -std=c++11 -o2)
# 編譯main.cpp生成可執行檔案main
add_executable(main main.cpp)
# 將hello動態庫檔案鏈結到可執行檔案main
target_link_libraries(main hello)
# 通過變數 src子目錄,src中需要乙個cmakelists.txt
add_subdirectory(src)
# 定義src變數,其值為當前目錄下所有的源**檔案
aux_source_directory(. src)
# 編譯src變數所**的源**檔案,生成main可執行檔案
add_excuatable(main $)
1.2 cmake常用變數# 在cmake_cxx_flags編譯選項後追加-std=c++11
set(cmake_cxx_flags "$ -std=c++11")
# 設定編譯型別為debug,除錯時需要選擇debug
set(cmake_build_type debug)
# 設定編譯型別為release,發布時需要選擇release
set(cmake_build_type release)
首先,編寫cmakelists.txt檔案,在工作區資料夾建立cmakelists.txt,編寫如下**:
# 最小版本,可以通過cmake --version檢視
cmake_minimum_required(version 3.22.1)
# 專案名稱,建議大寫
project(swap)
# 搜尋自定義的頭檔案目錄,可以使用絕對路徑 $/include
include_directories(include)
# 設定編譯時的選項,如o2優化,開啟警告,使用的c++標準等
set(cmake_cxx_flags "$ -wall")
# 除錯時使用該項
set(cmake_build_type debug)
# 生成可執行檔案命令,第乙個引數是生成可執行檔案的名稱,後面的引數是原始檔**
add_executable(main main.cpp src/swap.cpp)
# 指定生成可執行檔案的輸出目錄
set(executable_output_path "../out")
編寫完成之後,可以使用終端命令,檢驗cmakelists檔案編寫是否正確,在終端進入bulid目錄,輸入以下指令:
cmake .. # 之所以使用cmake ..是因為cmakelists.txt在build目錄的上級
make
../out/main # 執行生成的可執行檔案
執行結果如下:
可以看到執行成功。
launch.json檔案完成的是除錯工作,有兩個引數很關鍵,分別是
program和prelaunchtask,兩個引數分別代表了除錯執行程式的名稱和在除錯執行前執行的任務。該兩項需要修改,如圖所示:
launch.json的**如下:
/out/$",
"args": ,
"stopatentry": false,
"cwd": "$",
"environment": ,
"externalconsole": false,
"mimode": "gdb",
"setupcommands": [
],"prelaunchtask": "build",
"midebuggerpath": "/usr/bin/gdb"}]
}
task.json執行的是編譯產生可執行檔案的工作,其**如下:
/build"
},"tasks": [,,
],}
配置好兩個檔案就可以按f5除錯執行了,執行結果和之前一樣,至此使用cmake和vscode編譯執行多檔案c++程式完成。 多檔案上傳
這是我開發過程中用涉及到的乙個功能,現在備份下來。首先是在 web.confing 中做限制上傳大小配置和超時的配置,的節點下有 executiontimeout maxrequestlength兩個屬性。executiontimeout設定超時的時間值,預設的為90秒,如果超出這個時間,瀏覽器就會...
多檔案上傳
c 版本 upload.aspx page language c codebehind upload.aspx.cs autoeventwireup false inherits webportal.upload upload.aspx.cs using system using system.co...
多檔案編譯
編譯多個檔案 編輯兩個檔案 cs 和 class.cs cs using system namespace test class.cs using system namespace test public void saysomething 執行的命令 引數的使用都和單個檔案的執行一樣 如果不指定生...