commit
bdd9d393d6
@ -0,0 +1,24 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
charset = utf-8
|
||||||
|
|
||||||
|
[*.{c,h,cpp,hpp,toml}]
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
[{CMakeLists.txt, *.cmake}]
|
||||||
|
indent_style = tab
|
||||||
|
tab_width = 8
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
# Exclude the third_party folder
|
||||||
|
[/third_party/**]
|
||||||
|
charset = unset
|
||||||
|
end_of_line = unset
|
||||||
|
insert_final_newline = unset
|
||||||
|
trim_trailing_whitespace = unset
|
||||||
|
indent_style = unset
|
||||||
|
indent_size = unset
|
@ -1,78 +1,78 @@
|
|||||||
cmake_minimum_required(VERSION 3.20)
|
cmake_minimum_required(VERSION 3.20)
|
||||||
|
|
||||||
if(NOT CMAKE_SCRIPT_MODE_FILE)
|
if(NOT CMAKE_SCRIPT_MODE_FILE)
|
||||||
message(FATAL_ERROR "Usage: cmake -P bump_version.cmake [1.2.3]")
|
message(FATAL_ERROR "Usage: cmake -P bump_version.cmake [1.2.3]")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake.toml")
|
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake.toml")
|
||||||
message(FATAL_ERROR "Cannot find cmake.toml")
|
message(FATAL_ERROR "Cannot find cmake.toml")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake/cmkr.cmake")
|
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake/cmkr.cmake")
|
||||||
message(FATAL_ERROR "Cannot find cmkr.cmake")
|
message(FATAL_ERROR "Cannot find cmkr.cmake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Validate branch
|
# Validate branch
|
||||||
find_package(Git REQUIRED)
|
find_package(Git REQUIRED)
|
||||||
execute_process(COMMAND "${GIT_EXECUTABLE}" branch --show-current OUTPUT_VARIABLE GIT_BRANCH)
|
execute_process(COMMAND "${GIT_EXECUTABLE}" branch --show-current OUTPUT_VARIABLE GIT_BRANCH)
|
||||||
string(STRIP "${GIT_BRANCH}" GIT_BRANCH)
|
string(STRIP "${GIT_BRANCH}" GIT_BRANCH)
|
||||||
if(NOT GIT_BRANCH STREQUAL "main")
|
if(NOT GIT_BRANCH STREQUAL "main")
|
||||||
message(FATAL_ERROR "You need to be on the main branch, you are on: ${GIT_BRANCH}")
|
message(FATAL_ERROR "You need to be on the main branch, you are on: ${GIT_BRANCH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(READ "${CMAKE_SOURCE_DIR}/cmake.toml" CMAKE_TOML)
|
file(READ "${CMAKE_SOURCE_DIR}/cmake.toml" CMAKE_TOML)
|
||||||
string(FIND "${CMAKE_TOML}" "[project]" PROJECT_INDEX)
|
string(FIND "${CMAKE_TOML}" "[project]" PROJECT_INDEX)
|
||||||
string(SUBSTRING "${CMAKE_TOML}" ${PROJECT_INDEX} -1 CMAKE_TOML_PROJECT)
|
string(SUBSTRING "${CMAKE_TOML}" ${PROJECT_INDEX} -1 CMAKE_TOML_PROJECT)
|
||||||
set(SEMVER_REGEX "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
|
set(SEMVER_REGEX "([0-9]+)\\.([0-9]+)\\.([0-9]+)")
|
||||||
set(VERSION_REGEX "version = \"${SEMVER_REGEX}\"")
|
set(VERSION_REGEX "version = \"${SEMVER_REGEX}\"")
|
||||||
if(CMAKE_TOML_PROJECT MATCHES "${VERSION_REGEX}")
|
if(CMAKE_TOML_PROJECT MATCHES "${VERSION_REGEX}")
|
||||||
set(MAJOR "${CMAKE_MATCH_1}")
|
set(MAJOR "${CMAKE_MATCH_1}")
|
||||||
set(MINOR "${CMAKE_MATCH_2}")
|
set(MINOR "${CMAKE_MATCH_2}")
|
||||||
set(PATCH "${CMAKE_MATCH_3}")
|
set(PATCH "${CMAKE_MATCH_3}")
|
||||||
set(OLDVERSION "${MAJOR}.${MINOR}.${PATCH}")
|
set(OLDVERSION "${MAJOR}.${MINOR}.${PATCH}")
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Failed to match semantic version in cmake.toml")
|
message(FATAL_ERROR "Failed to match semantic version in cmake.toml")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_ARGV3)
|
if(CMAKE_ARGV3)
|
||||||
if(NOT CMAKE_ARGV3 MATCHES "${SEMVER_REGEX}")
|
if(NOT CMAKE_ARGV3 MATCHES "${SEMVER_REGEX}")
|
||||||
message(FATAL_ERROR "Invalid semantic version number '${CMAKE_ARGV3}'")
|
message(FATAL_ERROR "Invalid semantic version number '${CMAKE_ARGV3}'")
|
||||||
endif()
|
endif()
|
||||||
set(NEWVERSION "${CMAKE_ARGV3}")
|
set(NEWVERSION "${CMAKE_ARGV3}")
|
||||||
else()
|
else()
|
||||||
math(EXPR NEWPATCH "${PATCH} + 1")
|
math(EXPR NEWPATCH "${PATCH} + 1")
|
||||||
set(NEWVERSION "${MAJOR}.${MINOR}.${NEWPATCH}")
|
set(NEWVERSION "${MAJOR}.${MINOR}.${NEWPATCH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Version ${OLDVERSION} -> ${NEWVERSION}")
|
message(STATUS "Version ${OLDVERSION} -> ${NEWVERSION}")
|
||||||
|
|
||||||
find_program(CMKR_EXECUTABLE "cmkr" PATHS "${CMAKE_SOURCE_DIR}/build" PATH_SUFFIXES Debug Release RelWithDebInfo MinSizeRel NO_CACHE REQUIRED)
|
find_program(CMKR_EXECUTABLE "cmkr" PATHS "${CMAKE_SOURCE_DIR}/build" PATH_SUFFIXES Debug Release RelWithDebInfo MinSizeRel NO_CACHE REQUIRED)
|
||||||
message(STATUS "Found cmkr: ${CMKR_EXECUTABLE}")
|
message(STATUS "Found cmkr: ${CMKR_EXECUTABLE}")
|
||||||
|
|
||||||
# Replace version in cmake.toml
|
# Replace version in cmake.toml
|
||||||
string(REPLACE "version = \"${OLDVERSION}\"" "version = \"${NEWVERSION}\"" CMAKE_TOML "${CMAKE_TOML}")
|
string(REPLACE "version = \"${OLDVERSION}\"" "version = \"${NEWVERSION}\"" CMAKE_TOML "${CMAKE_TOML}")
|
||||||
file(CONFIGURE
|
file(CONFIGURE
|
||||||
OUTPUT "${CMAKE_SOURCE_DIR}/cmake.toml"
|
OUTPUT "${CMAKE_SOURCE_DIR}/cmake.toml"
|
||||||
CONTENT "${CMAKE_TOML}"
|
CONTENT "${CMAKE_TOML}"
|
||||||
@ONLY
|
@ONLY
|
||||||
NEWLINE_STYLE LF
|
NEWLINE_STYLE LF
|
||||||
)
|
)
|
||||||
|
|
||||||
# Run cmkr gen
|
# Run cmkr gen
|
||||||
execute_process(COMMAND "${CMKR_EXECUTABLE}" gen RESULT_VARIABLE CMKR_EXEC_RESULT)
|
execute_process(COMMAND "${CMKR_EXECUTABLE}" gen RESULT_VARIABLE CMKR_EXEC_RESULT)
|
||||||
if(NOT CMKR_EXEC_RESULT EQUAL 0)
|
if(NOT CMKR_EXEC_RESULT EQUAL 0)
|
||||||
message(FATAL_ERROR "cmkr gen failed (exit code ${CMKR_EXEC_RESULT})")
|
message(FATAL_ERROR "cmkr gen failed (exit code ${CMKR_EXEC_RESULT})")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Replace version in cmkr.cmake
|
# Replace version in cmkr.cmake
|
||||||
file(READ "${CMAKE_SOURCE_DIR}/cmake/cmkr.cmake" CMKR_CMAKE)
|
file(READ "${CMAKE_SOURCE_DIR}/cmake/cmkr.cmake" CMKR_CMAKE)
|
||||||
string(REGEX REPLACE "CMKR_TAG \"[^\"]+\"" "CMKR_TAG \"v${NEWVERSION}\"" CMKR_CMAKE "${CMKR_CMAKE}")
|
string(REGEX REPLACE "CMKR_TAG \"[^\"]+\"" "CMKR_TAG \"v${NEWVERSION}\"" CMKR_CMAKE "${CMKR_CMAKE}")
|
||||||
file(CONFIGURE
|
file(CONFIGURE
|
||||||
OUTPUT "${CMAKE_SOURCE_DIR}/cmake/cmkr.cmake"
|
OUTPUT "${CMAKE_SOURCE_DIR}/cmake/cmkr.cmake"
|
||||||
CONTENT "${CMKR_CMAKE}"
|
CONTENT "${CMKR_CMAKE}"
|
||||||
@ONLY
|
@ONLY
|
||||||
NEWLINE_STYLE LF
|
NEWLINE_STYLE LF
|
||||||
)
|
)
|
||||||
|
|
||||||
# Print git commands
|
# Print git commands
|
||||||
message(STATUS "Git commands to create new version:\ngit commit -a -m \"Bump to ${NEWVERSION}\"\ngit tag v${NEWVERSION}\ngit push origin main v${NEWVERSION}")
|
message(STATUS "Git commands to create new version:\ngit commit -a -m \"Bump to ${NEWVERSION}\"\ngit tag v${NEWVERSION}\ngit push origin main v${NEWVERSION}")
|
@ -1,7 +1,7 @@
|
|||||||
namespace cmkr {
|
namespace cmkr {
|
||||||
namespace resources {
|
namespace resources {
|
||||||
|
|
||||||
static const char* @RESOURCE_NAME@ = R"RESOURCE(@RESOURCE_CONTENTS@)RESOURCE";
|
static const char* @RESOURCE_NAME@ = R"RESOURCE(@RESOURCE_CONTENTS@)RESOURCE";
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1 +1 @@
|
|||||||
cmkr.build
|
cmkr.build
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
layout: null
|
layout: null
|
||||||
permalink: /getting-started/
|
permalink: /getting-started/
|
||||||
---
|
---
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="refresh" content="0;url=https://cmkr.build">
|
<meta http-equiv="refresh" content="0;url=https://cmkr.build">
|
||||||
</head>
|
</head>
|
||||||
</html>
|
</html>
|
@ -1,23 +1,23 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "conditions"
|
name = "conditions"
|
||||||
cmake-after = "set(CUSTOM ON)"
|
cmake-after = "set(CUSTOM ON)"
|
||||||
|
|
||||||
[conditions]
|
[conditions]
|
||||||
custom = "CUSTOM"
|
custom = "CUSTOM"
|
||||||
|
|
||||||
[target.example]
|
[target.example]
|
||||||
type = "executable"
|
type = "executable"
|
||||||
sources = ["src/main.cpp"]
|
sources = ["src/main.cpp"]
|
||||||
windows.sources = ["src/windows_specific.cpp"]
|
windows.sources = ["src/windows_specific.cpp"]
|
||||||
cmake-after = "message(STATUS cmake-after)"
|
cmake-after = "message(STATUS cmake-after)"
|
||||||
windows.cmake-after = "message(STATUS win32-after)"
|
windows.cmake-after = "message(STATUS win32-after)"
|
||||||
macos.cmake-after = "message(STATUS macos-after)"
|
macos.cmake-after = "message(STATUS macos-after)"
|
||||||
linux.cmake-after = "message(STATUS linux-after)"
|
linux.cmake-after = "message(STATUS linux-after)"
|
||||||
unix.cmake-after = "message(STATUS unix-after)"
|
unix.cmake-after = "message(STATUS unix-after)"
|
||||||
custom.cmake-after = "message(STATUS custom-after)"
|
custom.cmake-after = "message(STATUS custom-after)"
|
||||||
|
|
||||||
[target.example.properties]
|
[target.example.properties]
|
||||||
AUTOMOC = false
|
AUTOMOC = false
|
||||||
custom.OUTPUT_NAME = "example2"
|
custom.OUTPUT_NAME = "example2"
|
||||||
custom.AUTORCC = true
|
custom.AUTORCC = true
|
||||||
AUTOGEN = "ON"
|
AUTOGEN = "ON"
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
int main() {
|
int main() {
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
|
|
||||||
void foo() {
|
void foo() {
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
# Require a C++11 compiler for the target `example`.
|
# Require a C++11 compiler for the target `example`.
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "cxx-standard"
|
name = "cxx-standard"
|
||||||
description = "Changing C++ standard"
|
description = "Changing C++ standard"
|
||||||
|
|
||||||
[target.example]
|
[target.example]
|
||||||
type = "executable"
|
type = "executable"
|
||||||
sources = ["src/main.cpp"]
|
sources = ["src/main.cpp"]
|
||||||
compile-features = ["cxx_std_11"]
|
compile-features = ["cxx_std_11"]
|
||||||
|
|
||||||
# This is equivalent to CMake's [target_compile_features](https://cmake.org/cmake/help/latest/command/target_compile_features.html)`(example PRIVATE cxx_std_11)`. For more information on available C/C++ standards and features see [cmake-compile-features(7)](https://cmake.org/cmake/help/latest/manual/cmake-compile-features.7.html).
|
# This is equivalent to CMake's [target_compile_features](https://cmake.org/cmake/help/latest/command/target_compile_features.html)`(example PRIVATE cxx_std_11)`. For more information on available C/C++ standards and features see [cmake-compile-features(7)](https://cmake.org/cmake/help/latest/manual/cmake-compile-features.7.html).
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
auto tpl = std::make_tuple(1, 2);
|
auto tpl = std::make_tuple(1, 2);
|
||||||
printf("Hello from C++11 %d\n", std::get<0>(tpl));
|
printf("Hello from C++11 %d\n", std::get<0>(tpl));
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "globbing"
|
name = "globbing"
|
||||||
description = "Globbing sources"
|
description = "Globbing sources"
|
||||||
|
|
||||||
# Recursively glob in the mylib/ folder
|
# Recursively glob in the mylib/ folder
|
||||||
[target.mylib]
|
[target.mylib]
|
||||||
type = "static"
|
type = "static"
|
||||||
alias = "mylib::mylib"
|
alias = "mylib::mylib"
|
||||||
sources = ["mylib/**.hpp", "mylib/**.cpp"]
|
sources = ["mylib/**.hpp", "mylib/**.cpp"]
|
||||||
include-directories = ["mylib/include"]
|
include-directories = ["mylib/include"]
|
||||||
|
|
||||||
# Single-folder glob in example/src/
|
# Single-folder glob in example/src/
|
||||||
[target.example]
|
[target.example]
|
||||||
type = "executable"
|
type = "executable"
|
||||||
sources = ["example/src/*.cpp"]
|
sources = ["example/src/*.cpp"]
|
||||||
link-libraries = ["mylib::mylib"]
|
link-libraries = ["mylib::mylib"]
|
||||||
|
|
||||||
# As you can see in the example above you can use `**.ext` to glob recursively and `*.ext` to glob non-recursively. This **does not** generate `file(GLOB ...)` commands, but instead globs when cmkr is run. Files are sorted to give deterministic results regardless of the platform used.
|
# As you can see in the example above you can use `**.ext` to glob recursively and `*.ext` to glob non-recursively. This **does not** generate `file(GLOB ...)` commands, but instead globs when cmkr is run. Files are sorted to give deterministic results regardless of the platform used.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <mylib/mylib.hpp>
|
#include <mylib/mylib.hpp>
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
std::cout << mylib::message() << std::endl;
|
std::cout << mylib::message() << std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace mylib {
|
namespace mylib {
|
||||||
std::string message();
|
std::string message();
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include <mylib/mylib.hpp>
|
#include <mylib/mylib.hpp>
|
||||||
|
|
||||||
std::string mylib::message() {
|
std::string mylib::message() {
|
||||||
return "cmkr is awesome!";
|
return "cmkr is awesome!";
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "interface"
|
name = "interface"
|
||||||
description = "Header-only library"
|
description = "Header-only library"
|
||||||
|
|
||||||
[target.mylib]
|
[target.mylib]
|
||||||
type = "interface"
|
type = "interface"
|
||||||
include-directories = ["include"]
|
include-directories = ["include"]
|
||||||
compile-features = ["cxx_std_11"]
|
compile-features = ["cxx_std_11"]
|
||||||
|
|
||||||
[target.example]
|
[target.example]
|
||||||
type = "executable"
|
type = "executable"
|
||||||
sources = ["src/main.cpp"]
|
sources = ["src/main.cpp"]
|
||||||
link-libraries = ["mylib"]
|
link-libraries = ["mylib"]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
namespace mylib {
|
namespace mylib {
|
||||||
static const char *version() {
|
static const char *version() {
|
||||||
return "v1.0";
|
return "v1.0";
|
||||||
}
|
}
|
||||||
} // namespace mylib
|
} // namespace mylib
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
|
|
||||||
#include "mylib/mylib.hpp"
|
#include "mylib/mylib.hpp"
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
printf("mylib version: %s\n", mylib::version());
|
printf("mylib version: %s\n", mylib::version());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in new issue