在 Debian 上部署 C++ 项目的实用流程
一 准备构建环境
二 构建与安装到系统目录
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j$(nproc)
sudo make install
CXX := g++
CXXFLAGS := -O2 -Wall -std=c++17
TARGET := myapp
SRCS := main.cpp
OBJS := $(SRCS:.cpp=.o)
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
.PHONY: clean
make -j$(nproc)
sudo install -m 755 myapp /usr/local/bin/
which myapp
ldd /usr/local/bin/myapp # 查看动态依赖
myapp --version
三 打包为 Debian 安装包 .deb
myapp/
├── DEBIAN/
│ └── control
├── usr/
│ └── bin/
│ └── myapp
└── etc/
└── myapp.conf
Package: myapp
Version: 1.0.0
Section: utils
Priority: optional
Architecture: amd64
Depends: libc6 (>= 2.34)
Maintainer: Your Name <you@example.com>
Description: A simple C++ application
This is a demo packaged as a .deb.
chmod 755 DEBIAN
chmod 755 usr/bin/myapp
dpkg-deb --build myapp myapp_1.0.0_amd64.deb
sudo dpkg -i myapp_1.0.0_amd64.deb
dpkg -l | grep myapp
四 依赖管理与跨环境兼容
# Debian/Ubuntu 安装静态库
sudo apt-get install -y libstdc++-static
# 在 CMake 中增加(置于 add_executable 之前)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
make clean && make
五 快速最小示例
#include <iostream>
int main() { std::cout << "Hello, Debian!\n"; return 0; }
g++ -O2 -Wall -o hello hello.cpp
./hello
sudo install -m 755 hello /usr/local/bin/hello
mkdir -p myapp/usr/bin
cp hello myapp/usr/bin/
echo -e "Package: hello\nVersion: 1.0.0\nArchitecture: amd64\nMaintainer: you@example.com\nDescription: Hello app" > myapp/DEBIAN/control
dpkg-deb --build myapp hello_1.0.0_amd64.deb
sudo dpkg -i hello_1.0.0_amd64.deb