further writing CMakeLists.txt
This commit is contained in:
@ -4,7 +4,31 @@ include(CTest)
|
|||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -fsanitize=address -fsanitize=undefined -fsanitize=leak")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -fsanitize=address -fsanitize=undefined -fsanitize=leak")
|
||||||
option(TEST_BPT_ONLY "Only build BPT tests" ON)
|
|
||||||
|
# 执行git命令检查是否有未存档的更改
|
||||||
|
execute_process(
|
||||||
|
COMMAND git status --porcelain
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_STATUS_OUTPUT
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
# 判断输出是否为空,如果有未存档的更改则不做处理
|
||||||
|
string(LENGTH "${GIT_STATUS_OUTPUT}" STATUS_LENGTH)
|
||||||
|
if(STATUS_LENGTH EQUAL 0)
|
||||||
|
# 执行git命令获取commit信息
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_COMMIT_HASH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
# 定义宏传递commit信息给C++程序
|
||||||
|
add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
|
||||||
|
else()
|
||||||
|
add_definitions(-DGIT_COMMIT_HASH="[developing]")
|
||||||
|
endif()
|
||||||
|
|
||||||
include(FetchContent)
|
include(FetchContent)
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
googletest
|
googletest
|
||||||
@ -19,8 +43,8 @@ FetchContent_Declare(
|
|||||||
URL ${CMAKE_SOURCE_DIR}/deps/argparse-v3.0-mirror.zip
|
URL ${CMAKE_SOURCE_DIR}/deps/argparse-v3.0-mirror.zip
|
||||||
)
|
)
|
||||||
FetchContent_MakeAvailable(argparse)
|
FetchContent_MakeAvailable(argparse)
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/include)
|
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/bpt/include)
|
include_directories(${CMAKE_SOURCE_DIR}/bpt/include)
|
||||||
include_directories(${CMAKE_SOURCE_DIR}/stlite)
|
include_directories(${CMAKE_SOURCE_DIR}/stlite)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
add_subdirectory(src)
|
8
src/CMakeLists.txt
Normal file
8
src/CMakeLists.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
set(BACKEND_EXETUABLE_NAME "backend")
|
||||||
|
if(OJ_TEST_BACKEND)
|
||||||
|
set(BACKEND_EXETUABLE_NAME "code")
|
||||||
|
endif()
|
||||||
|
add_executable(${BACKEND_EXETUABLE_NAME} main.cpp)
|
||||||
|
target_link_libraries(${BACKEND_EXETUABLE_NAME} argparse)
|
||||||
|
set_target_properties(${BACKEND_EXETUABLE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
15
src/main.cpp
15
src/main.cpp
@ -0,0 +1,15 @@
|
|||||||
|
#include <argparse/argparse.hpp>
|
||||||
|
#include <string>
|
||||||
|
const std::string main_version = "0.0.1";
|
||||||
|
const std::string build_version = GIT_COMMIT_HASH;
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
argparse::ArgumentParser program("backend", main_version + "-" + build_version);
|
||||||
|
try {
|
||||||
|
program.parse_args(argc, argv);
|
||||||
|
} catch (const std::exception &err) {
|
||||||
|
std::cerr << err.what() << std::endl;
|
||||||
|
std::cerr << program;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,8 +1,5 @@
|
|||||||
if(TEST_BPT_ONLY)
|
if(OJ_TEST_BPT)
|
||||||
add_executable(code oj_test_interface_for_bpt.cpp)
|
add_executable(code oj_test_interface_for_bpt.cpp)
|
||||||
target_link_libraries(code argparse)
|
target_link_libraries(code argparse)
|
||||||
set_target_properties(code PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
set_target_properties(code PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||||
else()
|
|
||||||
add_executable(oj_test_interface_for_bpt oj_test_interface_for_bpt.cpp)
|
|
||||||
target_link_libraries(oj_test_interface_for_bpt argparse)
|
|
||||||
endif()
|
endif()
|
Reference in New Issue
Block a user