初版可用
This commit is contained in:
20
.clang-format
Normal file
20
.clang-format
Normal file
@@ -0,0 +1,20 @@
|
||||
BasedOnStyle: LLVM
|
||||
IndentWidth: 4
|
||||
PointerAlignment: Left
|
||||
AccessModifierOffset: -4
|
||||
ReflowComments: true
|
||||
SpacesBeforeTrailingComments: 3
|
||||
AllowShortFunctionsOnASingleLine: None
|
||||
AllowShortEnumsOnASingleLine: false
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterFunction: true
|
||||
AfterClass: true
|
||||
TabWidth: 4
|
||||
ColumnLimit: 130
|
||||
IncludeBlocks: Regroup
|
||||
IncludeCategories:
|
||||
- Regex: '^<.*>'
|
||||
Priority: 1
|
||||
- Regex: '^".*"'
|
||||
Priority: 2
|
||||
12
.clangd
Normal file
12
.clangd
Normal file
@@ -0,0 +1,12 @@
|
||||
Hover:
|
||||
ShowAKA: Yes
|
||||
Diagnostics:
|
||||
UnusedIncludes: None # 禁用未使用头文件提示
|
||||
Suppress: [
|
||||
anon_type_definition, # 禁用匿名的typedef提示
|
||||
unused-variable, # 禁用未使用变量提示
|
||||
unused-function, # 禁用未使用函数提示
|
||||
unused-includes,
|
||||
]
|
||||
ClangTidy:
|
||||
Remove: misc-unused-alias-decls
|
||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.cache/
|
||||
.qtcreator/
|
||||
build*
|
||||
8
.zed/keymap.json
Normal file
8
.zed/keymap.json
Normal file
@@ -0,0 +1,8 @@
|
||||
[
|
||||
{
|
||||
"context": "Editor",
|
||||
"bindings": {
|
||||
"alt-g": "editor::GoToDefinition",
|
||||
},
|
||||
},
|
||||
]
|
||||
26
.zed/settings.json
Normal file
26
.zed/settings.json
Normal file
@@ -0,0 +1,26 @@
|
||||
// Folder-specific settings
|
||||
//
|
||||
// For a full list of overridable settings, and general information on folder-specific settings,
|
||||
// see the documentation: https://zed.dev/docs/configuring-zed#settings-files
|
||||
{
|
||||
"tab_size": 4,
|
||||
"ensure_final_newline_on_save": true,
|
||||
"lsp": {
|
||||
"clangd": {
|
||||
"binary": {
|
||||
"arguments": [
|
||||
"--header-insertion=never",
|
||||
"--all-scopes-completion",
|
||||
"--completion-style=detailed",
|
||||
"--clang-tidy",
|
||||
"-j=4",
|
||||
"--pch-storage=memory",
|
||||
"--compile-commands-dir=build",
|
||||
"--background-index",
|
||||
"--ranking-model=heuristics",
|
||||
"--function-arg-placeholders=false",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
54
.zed/tasks.json
Normal file
54
.zed/tasks.json
Normal file
@@ -0,0 +1,54 @@
|
||||
[
|
||||
{
|
||||
"label": "Debug-Config",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"env": {
|
||||
"EXT_ARGS": "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_PREFIX_PATH=C:/local",
|
||||
"CC": "clang",
|
||||
"CXX": "clang++",
|
||||
},
|
||||
"args": [
|
||||
"/c",
|
||||
"cmake -Bbuild -S . -G Ninja %EXT_ARGS% -DCMAKE_BUILD_TYPE=Debug",
|
||||
],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
{
|
||||
"label": "Debug-Build",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"args": ["/c", "cmake --build build --config Debug"],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
{
|
||||
"label": "Release-Config",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"env": {
|
||||
"EXT_ARGS": "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_PREFIX_PATH=C:/local",
|
||||
"CC": "clang",
|
||||
"CXX": "clang++",
|
||||
},
|
||||
"args": [
|
||||
"/c",
|
||||
"cmake -Bbuild -S . -G Ninja %EXT_ARGS% -DCMAKE_BUILD_TYPE=Release",
|
||||
],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
{
|
||||
"label": "Release-Build",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"args": ["/c", "cmake --build build --config Release"],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
]
|
||||
20
CMakeLists.txt
Normal file
20
CMakeLists.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(hello-cmake LANGUAGES CXX)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})
|
||||
|
||||
find_package(cxxLibrary CONFIG REQUIRED)
|
||||
|
||||
if (MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
add_executable(hello-cmake main.cpp)
|
||||
target_link_libraries(hello-cmake PRIVATE cxxLibrary::cxxLibrary)
|
||||
|
||||
install(TARGETS hello-cmake DESTINATION bin)
|
||||
install(DIRECTORY template DESTINATION bin)
|
||||
111
main.cpp
Normal file
111
main.cpp
Normal file
@@ -0,0 +1,111 @@
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/nowide/fstream.hpp>
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <zoost/zoost.h>
|
||||
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
bool CopyDirectory(const std::string& from, const std::string& to)
|
||||
{
|
||||
try {
|
||||
fs::path source_path(from);
|
||||
fs::path target_path(to);
|
||||
|
||||
if (!fs::exists(source_path) || !fs::is_directory(source_path)) {
|
||||
std::cerr << "源目录不存在或不是目录: " << from << std::endl;
|
||||
return false;
|
||||
}
|
||||
if (!fs::exists(target_path)) {
|
||||
fs::create_directories(target_path);
|
||||
}
|
||||
for (const auto& entry : fs::recursive_directory_iterator(source_path)) {
|
||||
try {
|
||||
fs::path relative_path = entry.path().lexically_relative(source_path);
|
||||
fs::path full_target_path = target_path / relative_path;
|
||||
|
||||
if (fs::is_directory(entry.status())) {
|
||||
fs::create_directories(full_target_path);
|
||||
} else if (fs::is_regular_file(entry.status())) {
|
||||
fs::create_directories(full_target_path.parent_path());
|
||||
fs::copy_file(entry.path(), full_target_path, fs::copy_options::overwrite_existing);
|
||||
}
|
||||
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << "处理文件时出错: " << entry.path() << " - " << e.what() << std::endl;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << "复制目录时出错: " << e.what() << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
zoostCommon::SetOutputU8();
|
||||
zoostCommon::SetStdLibrayU8();
|
||||
|
||||
std::string arg("default");
|
||||
if (argc > 1) {
|
||||
arg = std::string(argv[1]);
|
||||
}
|
||||
|
||||
zoostPath zp;
|
||||
std::string binPath;
|
||||
if (!zp.GetBinaryPath(binPath)) {
|
||||
std::cerr << "获取二进制目录失败。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto from = fs::path(binPath).parent_path().append("template").append(arg);
|
||||
if (!fs::exists(from)) {
|
||||
std::cerr << "源目录不存在: " << from << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
auto toPath = fs::current_path();
|
||||
|
||||
// toPath必须为空目录
|
||||
if (!toPath.empty() && !fs::is_empty(toPath)) {
|
||||
std::cerr << "目标目录不是空目录: " << toPath << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::cout << "从: " << from << " 复制到: " << toPath << std::endl;
|
||||
|
||||
if (!CopyDirectory(from.string(), toPath.string())) {
|
||||
std::cerr << "复制目录失败。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::cout << "复制完成。" << std::endl;
|
||||
|
||||
// 进行替换操作。
|
||||
auto cmakeFile = fs::path(toPath).append("CMakeLists.txt");
|
||||
if (fs::exists(cmakeFile)) {
|
||||
boost::nowide::ifstream inFile(cmakeFile);
|
||||
if (!inFile.is_open()) {
|
||||
std::cerr << "无法打开 CMakeLists.txt 文件进行读取。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
std::string content((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
|
||||
inFile.close();
|
||||
|
||||
boost::replace_all(content, "zedTemplate", fs::path(toPath).filename().string());
|
||||
boost::nowide::ofstream outFile(cmakeFile);
|
||||
if (!outFile.is_open()) {
|
||||
std::cerr << "无法打开 CMakeLists.txt 文件进行写入。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
outFile.write(content.c_str(), content.size());
|
||||
outFile.close();
|
||||
} else {
|
||||
std::cerr << "CMakeLists.txt 文件不存在。" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
3
template/default/.gitignore
vendored
Normal file
3
template/default/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.cache/
|
||||
.qtcreator/
|
||||
build*
|
||||
8
template/default/.zed/keymap.json
Normal file
8
template/default/.zed/keymap.json
Normal file
@@ -0,0 +1,8 @@
|
||||
[
|
||||
{
|
||||
"context": "Editor",
|
||||
"bindings": {
|
||||
"alt-g": "editor::GoToDefinition",
|
||||
},
|
||||
},
|
||||
]
|
||||
26
template/default/.zed/settings.json
Normal file
26
template/default/.zed/settings.json
Normal file
@@ -0,0 +1,26 @@
|
||||
// Folder-specific settings
|
||||
//
|
||||
// For a full list of overridable settings, and general information on folder-specific settings,
|
||||
// see the documentation: https://zed.dev/docs/configuring-zed#settings-files
|
||||
{
|
||||
"tab_size": 4,
|
||||
"ensure_final_newline_on_save": true,
|
||||
"lsp": {
|
||||
"clangd": {
|
||||
"binary": {
|
||||
"arguments": [
|
||||
"--header-insertion=never",
|
||||
"--all-scopes-completion",
|
||||
"--completion-style=detailed",
|
||||
"--clang-tidy",
|
||||
"-j=4",
|
||||
"--pch-storage=memory",
|
||||
"--compile-commands-dir=build",
|
||||
"--background-index",
|
||||
"--ranking-model=heuristics",
|
||||
"--function-arg-placeholders=false",
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
54
template/default/.zed/tasks.json
Normal file
54
template/default/.zed/tasks.json
Normal file
@@ -0,0 +1,54 @@
|
||||
[
|
||||
{
|
||||
"label": "Debug-Config",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"env": {
|
||||
"EXT_ARGS": "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_PREFIX_PATH=C:/local",
|
||||
"CC": "clang",
|
||||
"CXX": "clang++",
|
||||
},
|
||||
"args": [
|
||||
"/c",
|
||||
"cmake -Bbuild -S . -G Ninja %EXT_ARGS% -DCMAKE_BUILD_TYPE=Debug",
|
||||
],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
{
|
||||
"label": "Debug-Build",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"args": ["/c", "cmake --build build --config Debug"],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
{
|
||||
"label": "Release-Config",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"env": {
|
||||
"EXT_ARGS": "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_PREFIX_PATH=C:/local",
|
||||
"CC": "clang",
|
||||
"CXX": "clang++",
|
||||
},
|
||||
"args": [
|
||||
"/c",
|
||||
"cmake -Bbuild -S . -G Ninja %EXT_ARGS% -DCMAKE_BUILD_TYPE=Release",
|
||||
],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
{
|
||||
"label": "Release-Build",
|
||||
"command": "cmd",
|
||||
"shell": {
|
||||
"program": "C:\\Windows\\System32\\cmd.exe",
|
||||
},
|
||||
"args": ["/c", "cmake --build build --config Release"],
|
||||
"cwd": "$ZED_WORKTREE_ROOT",
|
||||
},
|
||||
]
|
||||
14
template/default/CMakeLists.txt
Normal file
14
template/default/CMakeLists.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(zedTemplate LANGUAGES CXX)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE})
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})
|
||||
|
||||
if (MSVC)
|
||||
add_compile_options(/utf-8)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
endif()
|
||||
|
||||
add_executable(zedTemplate main.cpp)
|
||||
7
template/default/main.cpp
Normal file
7
template/default/main.cpp
Normal file
@@ -0,0 +1,7 @@
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
{
|
||||
std::cout << "Done." << std::endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user