This commit is contained in:
Jie 2024-11-25 14:40:38 +08:00
commit 4226837dbc
4 changed files with 202 additions and 0 deletions

8
.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# Xmake cache
.xmake/
build/
# MacOS Cache
.DS_Store

69
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,69 @@
{
"files.associations": {
"*.cpp": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"array": "cpp",
"atomic": "cpp",
"bit": "cpp",
"*.tcc": "cpp",
"charconv": "cpp",
"chrono": "cpp",
"codecvt": "cpp",
"compare": "cpp",
"concepts": "cpp",
"condition_variable": "cpp",
"cstdint": "cpp",
"deque": "cpp",
"list": "cpp",
"string": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"ratio": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"fstream": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"limits": "cpp",
"mutex": "cpp",
"new": "cpp",
"numbers": "cpp",
"ostream": "cpp",
"semaphore": "cpp",
"span": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"stop_token": "cpp",
"streambuf": "cpp",
"thread": "cpp",
"cinttypes": "cpp",
"typeinfo": "cpp",
"variant": "cpp",
"format": "cpp"
}
}

49
src/main.cpp Normal file
View File

@ -0,0 +1,49 @@
#include <cstdio>
#include <iostream>
#include <filesystem>
#include <string_view>
#include <fstream>
#include <format>
namespace fs = std::filesystem;
std::string get_projectname(){
auto workdir = fs::canonical(fs::current_path());
while(true){
for(auto& entry : fs::directory_iterator(workdir)){
if(entry.path().filename() == "xmake.lua"){
auto file = std::ifstream(entry.path(), std::ios::in);
std::string line;
while(getline(file, line)){
if(line.find("target") != std::string::npos){
return line.substr(line.find("\"") + 1, line.find_last_of("\"") - line.find_first_of("\"") -1);
}
}
}
}
if(workdir == fs::path("/home")){
return "";
}
workdir = workdir.parent_path();
}
}
int main(int argc, char** const argv){
auto res = std::system("xmake build");
if(argc < 2){
if(res != 0) return -1;
return std::system("xmake run");
}
auto project_name = get_projectname();
if(project_name == ""){
std::cout << "[Error] Not Find Xmake Project File" << std::endl;
return -1;
}
std::string opt;
for(int i = 1; i<argc;i++){
opt += argv[i];
opt += " ";
}
std::string really_cmd;
std::format_to(std::back_inserter(really_cmd), "xmake run -w {} {} {}", fs::current_path().string(), project_name, opt);
return std::system(really_cmd.c_str());
}

76
xmake.lua Normal file
View File

@ -0,0 +1,76 @@
set_languages("c++23")
add_rules("mode.debug", "mode.release")
target("re")
set_kind("binary")
add_files("src/*.cpp")
--
-- If you want to known more usage about xmake, please see https://xmake.io
--
-- ## FAQ
--
-- You can enter the project directory firstly before building project.
--
-- $ cd projectdir
--
-- 1. How to build project?
--
-- $ xmake
--
-- 2. How to configure project?
--
-- $ xmake f -p [macosx|linux|iphoneos ..] -a [x86_64|i386|arm64 ..] -m [debug|release]
--
-- 3. Where is the build output directory?
--
-- The default output directory is `./build` and you can configure the output directory.
--
-- $ xmake f -o outputdir
-- $ xmake
--
-- 4. How to run and debug target after building project?
--
-- $ xmake run [targetname]
-- $ xmake run -d [targetname]
--
-- 5. How to install target to the system directory or other output directory?
--
-- $ xmake install
-- $ xmake install -o installdir
--
-- 6. Add some frequently-used compilation flags in xmake.lua
--
-- @code
-- -- add debug and release modes
-- add_rules("mode.debug", "mode.release")
--
-- -- add macro definition
-- add_defines("NDEBUG", "_GNU_SOURCE=1")
--
-- -- set warning all as error
-- set_warnings("all", "error")
--
-- -- set language: c99, c++11
-- set_languages("c99", "c++11")
--
-- -- set optimization: none, faster, fastest, smallest
-- set_optimize("fastest")
--
-- -- add include search directories
-- add_includedirs("/usr/include", "/usr/local/include")
--
-- -- add link libraries and search directories
-- add_links("tbox")
-- add_linkdirs("/usr/local/lib", "/usr/lib")
--
-- -- add system link libraries
-- add_syslinks("z", "pthread")
--
-- -- add compilation and link flags
-- add_cxflags("-stdnolib", "-fno-strict-aliasing")
-- add_ldflags("-L/usr/local/lib", "-lpthread", {force = true})
--
-- @endcode
--