cmake + bugfix
This commit is contained in:
parent
ea025ba2fc
commit
729d23a1e9
9
.clang-format
Normal file
9
.clang-format
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
BasedOnStyle: Chromium
|
||||||
|
IndentWidth: 2
|
||||||
|
ColumnLimit: 160
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
UseTab: Never
|
||||||
|
AllowShortIfStatementsOnASingleLine: false
|
||||||
|
AlignTrailingComments: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
AlignConsecutiveMacros: Consecutive
|
23
CMakeLists.txt
Normal file
23
CMakeLists.txt
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.22)
|
||||||
|
project(flags-cpp)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_COMPILER clang++)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20 -Wall -Wextra -Werror")
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS true)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE SOURCES "${CMAKE_SOURCE_DIR}/src/flags-cpp/*.cpp")
|
||||||
|
add_library(flags-cpp OBJECT ${SOURCES})
|
||||||
|
set_target_properties(flags-cpp PROPERTIES POSITION_INDEPENDENT_CODE 1)
|
||||||
|
target_include_directories(flags-cpp PUBLIC "${CMAKE_SOURCE_DIR}/inc")
|
||||||
|
|
||||||
|
add_library(flags-cpp-static STATIC $<TARGET_OBJECTS:flags-cpp>)
|
||||||
|
set_target_properties(flags-cpp-static PROPERTIES OUTPUT_NAME flags-cpp)
|
||||||
|
target_include_directories(flags-cpp-static PUBLIC "${CMAKE_SOURCE_DIR}/inc")
|
||||||
|
|
||||||
|
add_library(flags-cpp-shared SHARED $<TARGET_OBJECTS:flags-cpp>)
|
||||||
|
set_target_properties(flags-cpp-shared PROPERTIES OUTPUT_NAME flags-cpp)
|
||||||
|
target_include_directories(flags-cpp-shared PUBLIC "${CMAKE_SOURCE_DIR}/inc")
|
||||||
|
|
||||||
|
add_executable(example "${CMAKE_SOURCE_DIR}/src/main.cpp")
|
||||||
|
target_link_libraries(example flags-cpp-shared)
|
@ -4,7 +4,7 @@ This project aims to recreate the functionality of the `flag` package from Golan
|
|||||||
## Usage
|
## Usage
|
||||||
### Create a parser
|
### Create a parser
|
||||||
```c++
|
```c++
|
||||||
#include "flags.h"
|
#include <flags-cpp/flags-cpp.h>
|
||||||
|
|
||||||
Parser parser;
|
Parser parser;
|
||||||
or
|
or
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
#include <typeindex>
|
#include <typeindex>
|
||||||
|
|
||||||
namespace Flags {
|
namespace Flags {
|
@ -1,4 +1,4 @@
|
|||||||
#include "flags.h"
|
#include <flags-cpp/flags-cpp.h>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -136,13 +136,15 @@ bool Parser::parse(int argc, char** argv) {
|
|||||||
for (size_t i = 1; i < args.size() - 1; i++) {
|
for (size_t i = 1; i < args.size() - 1; i++) {
|
||||||
const std::string& arg = args[i];
|
const std::string& arg = args[i];
|
||||||
if (starts_with(arg, prefix) && arg.size() > prefix.size()) {
|
if (starts_with(arg, prefix) && arg.size() > prefix.size()) {
|
||||||
|
if (flags.contains(arg.substr(prefix.size())))
|
||||||
flags[arg.substr(prefix.size())]->parse(args[i + 1]);
|
flags[arg.substr(prefix.size())]->parse(args[i + 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for the last argument
|
// check for the last argument
|
||||||
if (starts_with(args[args.size() - 1], prefix) && args[args.size() - 1].size() > prefix.size()) {
|
if (starts_with(args[args.size() - 1], prefix) && args[args.size() - 1].size() > prefix.size()) {
|
||||||
flags[args[args.size() - 1].substr(prefix.size())]->parse("");
|
if (flags.contains(args.back().substr(prefix.size())))
|
||||||
|
flags[args.back().substr(prefix.size())]->parse("");
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_found() == flags.size();
|
return get_found() == flags.size();
|
19
src/main.cpp
Normal file
19
src/main.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include <flags-cpp/flags-cpp.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
using namespace Flags;
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
Parser parser;
|
||||||
|
|
||||||
|
auto x = parser.add<std::string>("myStr", "some description", true,
|
||||||
|
"default value string");
|
||||||
|
auto y = parser.add<int>("myInt", "some description", true, 13);
|
||||||
|
|
||||||
|
if (!parser.parse(argc, argv))
|
||||||
|
parser.help();
|
||||||
|
|
||||||
|
std::cout << *x << std::endl << *y << std::endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user