switch to cmake and add c++ modules
i have to switch to cmake to get proper c++ modules support.
This commit is contained in:
parent
16504e70a4
commit
b1ac6cfb47
10 changed files with 47 additions and 18 deletions
23
CMakeLists.txt
Normal file
23
CMakeLists.txt
Normal file
|
@ -0,0 +1,23 @@
|
|||
cmake_minimum_required(VERSION 3.26)
|
||||
project(LearningProject CXX)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE
|
||||
"<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> <SOURCE>"
|
||||
" -MT <DYNDEP_FILE> -MD -MF <DEP_FILE>"
|
||||
" ${flags_to_scan_deps} -fdep-file=<DYNDEP_FILE> -fdep-output=<OBJECT>"
|
||||
)
|
||||
|
||||
set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "gcc")
|
||||
set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG
|
||||
"${compiler_flags_for_module_map} -fmodule-mapper=<MODULE_MAP_FILE>")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
|
||||
set(CMAKE_EXPERIMENTAL_CXX_MODULE_CMAKE_API "2182bf5c-ef0d-489a-91da-49dbc3090d2a")
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
add_subdirectory(src)
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
project('LearningProject', 'cpp')
|
||||
subdir('src')
|
7
src/CMakeLists.txt
Normal file
7
src/CMakeLists.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
add_subdirectory(math)
|
||||
|
||||
add_executable(hello hello.cc)
|
||||
add_executable(sqrt sqrt.cc)
|
||||
target_link_libraries(sqrt PRIVATE Math)
|
||||
add_executable(inheritance inheritance.cc)
|
||||
add_executable(enumerations enumerations.cc)
|
|
@ -1,6 +1,6 @@
|
|||
#include <iostream>
|
||||
|
||||
std::string generate_crewmate_string(std::string type);
|
||||
constexpr std::string generate_crewmate_string(std::string type);
|
||||
|
||||
enum class CrewmateType {
|
||||
Sus,
|
||||
|
@ -34,7 +34,7 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
std::string generate_crewmate_string(std::string type)
|
||||
constexpr std::string generate_crewmate_string(std::string type)
|
||||
{
|
||||
return "Your crewmate type is " + type;
|
||||
}
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#include "math.hh"
|
||||
double Math::square(double x)
|
||||
{
|
||||
return x * x;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
class Math {
|
||||
public:
|
||||
double static square(double x);
|
||||
};
|
2
src/math/CMakeLists.txt
Normal file
2
src/math/CMakeLists.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
add_library(Math)
|
||||
target_sources(Math PUBLIC FILE_SET cxx_modules TYPE CXX_MODULES FILES math.cc)
|
12
src/math/math.cc
Normal file
12
src/math/math.cc
Normal file
|
@ -0,0 +1,12 @@
|
|||
module;
|
||||
export module Math;
|
||||
|
||||
export class Math {
|
||||
public:
|
||||
double static square(double x);
|
||||
};
|
||||
|
||||
double Math::square(double x)
|
||||
{
|
||||
return x * x;
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
executable('hello', 'hello.cc')
|
||||
executable('sqrt', ['math.cc', 'sqrt.cc'])
|
||||
executable('inheritance', 'inheritance.cc')
|
||||
executable('enumerations', 'enumerations.cc')
|
|
@ -1,4 +1,4 @@
|
|||
#include "math.hh"
|
||||
import Math;
|
||||
#include <iostream>
|
||||
|
||||
void print_squared(double x);
|
||||
|
|
Loading…
Reference in a new issue