生成 C++ 代码工程
This commit is contained in:
parent
76e108240b
commit
e511db807d
|
|
@ -0,0 +1,24 @@
|
|||
cmake_minimum_required(VERSION 3.10)
|
||||
project(SimpleCppProject VERSION 1.0.0 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# 输出目录
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
|
||||
# 包含目录
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
|
||||
# 主程序
|
||||
add_executable(main_app src/main.cpp src/app.cpp)
|
||||
|
||||
# 测试程序
|
||||
add_executable(basic_test tests/basic_test.cpp src/app.cpp)
|
||||
|
||||
# 安装目标(可选)
|
||||
install(TARGETS main_app RUNTIME DESTINATION bin)
|
||||
install(TARGETS basic_test RUNTIME DESTINATION bin)
|
||||
61
README.md
61
README.md
|
|
@ -1,2 +1,61 @@
|
|||
# 未命名
|
||||
# Simple C++ CMake Project
|
||||
|
||||
这是一个简单的 C++17 项目,使用 CMake 构建系统。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
├── CMakeLists.txt # CMake 配置文件
|
||||
├── README.md # 项目说明文档
|
||||
├── include/
|
||||
│ └── app.hpp # 应用程序头文件
|
||||
├── src/
|
||||
│ ├── app.cpp # 应用程序实现
|
||||
│ └── main.cpp # 主程序入口
|
||||
└── tests/
|
||||
└── basic_test.cpp # 基本测试
|
||||
```
|
||||
|
||||
## 编译步骤
|
||||
|
||||
### 1. 创建构建目录
|
||||
```bash
|
||||
mkdir build
|
||||
cd build
|
||||
```
|
||||
|
||||
### 2. 配置 CMake
|
||||
```bash
|
||||
cmake ..
|
||||
```
|
||||
|
||||
### 3. 编译项目
|
||||
```bash
|
||||
cmake --build .
|
||||
```
|
||||
|
||||
或者使用平台特定的编译命令:
|
||||
```bash
|
||||
make # Linux/macOS
|
||||
```
|
||||
|
||||
### 4. 运行主程序
|
||||
编译完成后,可执行文件位于 `build/bin/` 目录下:
|
||||
|
||||
```bash
|
||||
# 运行主程序
|
||||
./build/bin/main_app
|
||||
|
||||
# 运行测试
|
||||
./build/bin/basic_test
|
||||
```
|
||||
|
||||
## 功能说明
|
||||
|
||||
- **main_app**: 主程序,演示基本的应用程序功能
|
||||
- **basic_test**: 基本测试程序,验证核心功能
|
||||
|
||||
## 依赖要求
|
||||
|
||||
- CMake 3.10 或更高版本
|
||||
- 支持 C++17 的编译器(如 GCC 7+, Clang 5+, MSVC 2017+)
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
#ifndef SIMPLE_APP_HPP
|
||||
#define SIMPLE_APP_HPP
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* @brief 简单的应用程序类,提供基本功能
|
||||
*/
|
||||
class SimpleApp {
|
||||
public:
|
||||
/**
|
||||
* @brief 构造函数
|
||||
* @param name 应用程序名称
|
||||
*/
|
||||
explicit SimpleApp(const std::string& name);
|
||||
|
||||
/**
|
||||
* @brief 获取应用程序名称
|
||||
* @return 应用程序名称
|
||||
*/
|
||||
std::string getName() const;
|
||||
|
||||
/**
|
||||
* @brief 设置应用程序名称
|
||||
* @param name 新的应用程序名称
|
||||
*/
|
||||
void setName(const std::string& name);
|
||||
|
||||
/**
|
||||
* @brief 添加一个数字到列表中
|
||||
* @param number 要添加的数字
|
||||
*/
|
||||
void addNumber(int number);
|
||||
|
||||
/**
|
||||
* @brief 获取所有数字的总和
|
||||
* @return 数字总和
|
||||
*/
|
||||
int getSum() const;
|
||||
|
||||
/**
|
||||
* @brief 获取数字列表
|
||||
* @return 数字列表的引用
|
||||
*/
|
||||
const std::vector<int>& getNumbers() const;
|
||||
|
||||
/**
|
||||
* @brief 清空所有数字
|
||||
*/
|
||||
void clearNumbers();
|
||||
|
||||
/**
|
||||
* @brief 获取应用程序信息
|
||||
* @return 格式化的应用程序信息字符串
|
||||
*/
|
||||
std::string getInfo() const;
|
||||
|
||||
private:
|
||||
std::string appName;
|
||||
std::vector<int> numbers;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 计算两个整数的和
|
||||
* @param a 第一个整数
|
||||
* @param b 第二个整数
|
||||
* @return 两数之和
|
||||
*/
|
||||
int add(int a, int b);
|
||||
|
||||
/**
|
||||
* @brief 计算两个整数的乘积
|
||||
* @param a 第一个整数
|
||||
* @param b 第二个整数
|
||||
* @return 两数之积
|
||||
*/
|
||||
int multiply(int a, int b);
|
||||
|
||||
/**
|
||||
* @brief 生成欢迎消息
|
||||
* @param name 用户名
|
||||
* @return 欢迎消息
|
||||
*/
|
||||
std::string generateWelcomeMessage(const std::string& name);
|
||||
|
||||
#endif // SIMPLE_APP_HPP
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
#include "app.hpp"
|
||||
#include <sstream>
|
||||
#include <numeric>
|
||||
|
||||
SimpleApp::SimpleApp(const std::string& name) : appName(name) {
|
||||
}
|
||||
|
||||
std::string SimpleApp::getName() const {
|
||||
return appName;
|
||||
}
|
||||
|
||||
void SimpleApp::setName(const std::string& name) {
|
||||
appName = name;
|
||||
}
|
||||
|
||||
void SimpleApp::addNumber(int number) {
|
||||
numbers.push_back(number);
|
||||
}
|
||||
|
||||
int SimpleApp::getSum() const {
|
||||
if (numbers.empty()) {
|
||||
return 0;
|
||||
}
|
||||
return std::accumulate(numbers.begin(), numbers.end(), 0);
|
||||
}
|
||||
|
||||
const std::vector<int>& SimpleApp::getNumbers() const {
|
||||
return numbers;
|
||||
}
|
||||
|
||||
void SimpleApp::clearNumbers() {
|
||||
numbers.clear();
|
||||
}
|
||||
|
||||
std::string SimpleApp::getInfo() const {
|
||||
std::ostringstream oss;
|
||||
oss << "Application: " << appName << "\n";
|
||||
oss << "Numbers count: " << numbers.size() << "\n";
|
||||
oss << "Sum of numbers: " << getSum() << "\n";
|
||||
|
||||
if (!numbers.empty()) {
|
||||
oss << "Numbers: ";
|
||||
for (size_t i = 0; i < numbers.size(); ++i) {
|
||||
if (i > 0) {
|
||||
oss << ", ";
|
||||
}
|
||||
oss << numbers[i];
|
||||
}
|
||||
}
|
||||
|
||||
return oss.str();
|
||||
}
|
||||
|
||||
int add(int a, int b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
int multiply(int a, int b) {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
std::string generateWelcomeMessage(const std::string& name) {
|
||||
return "Welcome, " + name + "! This is a simple C++ application.";
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
#include "app.hpp"
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
std::cout << "=== Simple C++ Application Demo ===\n\n";
|
||||
|
||||
// 演示基本函数
|
||||
std::cout << "1. Basic function demonstrations:\n";
|
||||
std::cout << " add(5, 3) = " << add(5, 3) << "\n";
|
||||
std::cout << " multiply(4, 6) = " << multiply(4, 6) << "\n";
|
||||
std::cout << " Message: " << generateWelcomeMessage("User") << "\n\n";
|
||||
|
||||
// 创建应用程序实例
|
||||
SimpleApp app("DemoApp");
|
||||
|
||||
// 演示应用程序功能
|
||||
std::cout << "2. Application instance operations:\n";
|
||||
std::cout << " Initial app name: " << app.getName() << "\n";
|
||||
|
||||
// 添加一些数字
|
||||
app.addNumber(10);
|
||||
app.addNumber(20);
|
||||
app.addNumber(30);
|
||||
app.addNumber(40);
|
||||
|
||||
// 显示应用程序信息
|
||||
std::cout << "\n After adding numbers:\n";
|
||||
std::cout << " " << app.getInfo() << "\n";
|
||||
|
||||
// 修改应用程序名称
|
||||
app.setName("UpdatedApp");
|
||||
std::cout << "\n After updating name:\n";
|
||||
std::cout << " New app name: " << app.getName() << "\n";
|
||||
|
||||
// 添加更多数字
|
||||
app.addNumber(50);
|
||||
std::cout << "\n After adding 50:\n";
|
||||
std::cout << " Sum: " << app.getSum() << "\n";
|
||||
|
||||
// 清空数字并重新开始
|
||||
app.clearNumbers();
|
||||
std::cout << "\n After clearing numbers:\n";
|
||||
std::cout << " Numbers count: " << app.getNumbers().size() << "\n";
|
||||
|
||||
// 重新添加一些数字
|
||||
for (int i = 1; i <= 5; ++i) {
|
||||
app.addNumber(i * i); // 添加平方数
|
||||
}
|
||||
|
||||
std::cout << "\n After adding squares 1-5:\n";
|
||||
std::cout << " " << app.getInfo() << "\n\n";
|
||||
|
||||
// 最终总结
|
||||
std::cout << "3. Summary:\n";
|
||||
std::cout << " Application demo completed successfully.\n";
|
||||
std::cout << " Total numbers processed: " << app.getNumbers().size() << "\n";
|
||||
std::cout << " Final sum: " << app.getSum() << "\n";
|
||||
|
||||
std::cout << "\n=== End of Demo ===\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,189 @@
|
|||
#include "app.hpp"
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* @brief 测试 add 函数
|
||||
*/
|
||||
void testAddFunction() {
|
||||
std::cout << "Testing add function...\n";
|
||||
|
||||
// 测试基本加法
|
||||
assert(add(0, 0) == 0);
|
||||
assert(add(5, 3) == 8);
|
||||
assert(add(-5, 10) == 5);
|
||||
assert(add(-3, -7) == -10);
|
||||
|
||||
// 测试边界情况
|
||||
assert(add(100, 200) == 300);
|
||||
|
||||
std::cout << " add function tests passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 测试 multiply 函数
|
||||
*/
|
||||
void testMultiplyFunction() {
|
||||
std::cout << "Testing multiply function...\n";
|
||||
|
||||
// 测试基本乘法
|
||||
assert(multiply(0, 5) == 0);
|
||||
assert(multiply(5, 3) == 15);
|
||||
assert(multiply(-5, 3) == -15);
|
||||
assert(multiply(-4, -5) == 20);
|
||||
|
||||
// 测试边界情况
|
||||
assert(multiply(10, 10) == 100);
|
||||
|
||||
std::cout << " multiply function tests passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 测试 SimpleApp 类的基本功能
|
||||
*/
|
||||
void testSimpleAppBasic() {
|
||||
std::cout << "Testing SimpleApp basic functionality...\n";
|
||||
|
||||
// 测试构造函数和getter
|
||||
SimpleApp app("TestApp");
|
||||
assert(app.getName() == "TestApp");
|
||||
|
||||
// 测试setter
|
||||
app.setName("RenamedApp");
|
||||
assert(app.getName() == "RenamedApp");
|
||||
|
||||
// 测试添加数字和求和
|
||||
assert(app.getSum() == 0); // 初始和为0
|
||||
assert(app.getNumbers().empty());
|
||||
|
||||
app.addNumber(10);
|
||||
assert(app.getSum() == 10);
|
||||
assert(app.getNumbers().size() == 1);
|
||||
assert(app.getNumbers()[0] == 10);
|
||||
|
||||
app.addNumber(20);
|
||||
assert(app.getSum() == 30);
|
||||
assert(app.getNumbers().size() == 2);
|
||||
|
||||
std::cout << " SimpleApp basic tests passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 测试 SimpleApp 类的数字管理功能
|
||||
*/
|
||||
void testSimpleAppNumberManagement() {
|
||||
std::cout << "Testing SimpleApp number management...\n";
|
||||
|
||||
SimpleApp app("NumberApp");
|
||||
|
||||
// 添加多个数字
|
||||
for (int i = 1; i <= 5; ++i) {
|
||||
app.addNumber(i * 10);
|
||||
}
|
||||
|
||||
// 验证数字
|
||||
const auto& numbers = app.getNumbers();
|
||||
assert(numbers.size() == 5);
|
||||
assert(numbers[0] == 10);
|
||||
assert(numbers[1] == 20);
|
||||
assert(numbers[2] == 30);
|
||||
assert(numbers[3] == 40);
|
||||
assert(numbers[4] == 50);
|
||||
|
||||
// 验证总和
|
||||
assert(app.getSum() == 150); // 10+20+30+40+50 = 150
|
||||
|
||||
// 测试清空功能
|
||||
app.clearNumbers();
|
||||
assert(app.getNumbers().empty());
|
||||
assert(app.getSum() == 0);
|
||||
|
||||
// 重新添加并验证
|
||||
app.addNumber(100);
|
||||
app.addNumber(200);
|
||||
assert(app.getSum() == 300);
|
||||
assert(app.getNumbers().size() == 2);
|
||||
|
||||
std::cout << " SimpleApp number management tests passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 测试 generateWelcomeMessage 函数
|
||||
*/
|
||||
void testWelcomeMessage() {
|
||||
std::cout << "Testing generateWelcomeMessage function...\n";
|
||||
|
||||
std::string msg1 = generateWelcomeMessage("Alice");
|
||||
assert(msg1.find("Alice") != std::string::npos);
|
||||
assert(msg1.find("Welcome") != std::string::npos);
|
||||
|
||||
std::string msg2 = generateWelcomeMessage("Bob");
|
||||
assert(msg2.find("Bob") != std::string::npos);
|
||||
|
||||
std::string msg3 = generateWelcomeMessage("");
|
||||
assert(msg3.find("Welcome") != std::string::npos);
|
||||
|
||||
std::cout << " Welcome message tests passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 测试 SimpleApp 的信息生成功能
|
||||
*/
|
||||
void testAppInfo() {
|
||||
std::cout << "Testing SimpleApp info generation...\n";
|
||||
|
||||
SimpleApp app("InfoApp");
|
||||
|
||||
// 空应用的信息
|
||||
std::string emptyInfo = app.getInfo();
|
||||
assert(emptyInfo.find("InfoApp") != std::string::npos);
|
||||
assert(emptyInfo.find("Numbers count: 0") != std::string::npos);
|
||||
|
||||
// 添加数字后的信息
|
||||
app.addNumber(1);
|
||||
app.addNumber(2);
|
||||
app.addNumber(3);
|
||||
|
||||
std::string fullInfo = app.getInfo();
|
||||
assert(fullInfo.find("InfoApp") != std::string::npos);
|
||||
assert(fullInfo.find("Numbers count: 3") != std::string::npos);
|
||||
assert(fullInfo.find("Sum of numbers: 6") != std::string::npos);
|
||||
assert(fullInfo.find("1, 2, 3") != std::string::npos);
|
||||
|
||||
std::cout << " App info generation tests passed!\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 主测试函数
|
||||
*/
|
||||
int main() {
|
||||
std::cout << "=== Starting Basic Tests ===\n\n";
|
||||
|
||||
try {
|
||||
testAddFunction();
|
||||
std::cout << "\n";
|
||||
|
||||
testMultiplyFunction();
|
||||
std::cout << "\n";
|
||||
|
||||
testWelcomeMessage();
|
||||
std::cout << "\n";
|
||||
|
||||
testSimpleAppBasic();
|
||||
std::cout << "\n";
|
||||
|
||||
testSimpleAppNumberManagement();
|
||||
std::cout << "\n";
|
||||
|
||||
testAppInfo();
|
||||
|
||||
std::cout << "\n=== All Tests Passed! ===\n";
|
||||
return 0;
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << "Test failed with exception: " << e.what() << "\n";
|
||||
return 1;
|
||||
} catch (...) {
|
||||
std::cerr << "Test failed with unknown exception\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue