From f6ae4c9f66fd33a60baf62ba1652c186155e7c6e Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Mon, 15 Apr 2024 06:49:08 +0000 Subject: [PATCH] further writing CMakeLists.txt --- CMakeLists.txt | 30 +++++++++++++++++++++++++++--- src/CMakeLists.txt | 8 ++++++++ src/main.cpp | 15 +++++++++++++++ test/CMakeLists.txt | 5 +---- 4 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index f0adf5f..b5c6e4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,31 @@ include(CTest) set(CMAKE_CXX_STANDARD 20) 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") -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) FetchContent_Declare( googletest @@ -19,8 +43,8 @@ FetchContent_Declare( URL ${CMAKE_SOURCE_DIR}/deps/argparse-v3.0-mirror.zip ) FetchContent_MakeAvailable(argparse) -include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(${CMAKE_SOURCE_DIR}/bpt/include) include_directories(${CMAKE_SOURCE_DIR}/stlite) enable_testing() -add_subdirectory(test) \ No newline at end of file +add_subdirectory(test) +add_subdirectory(src) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..7ce699d --- /dev/null +++ b/src/CMakeLists.txt @@ -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}) \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index e69de29..ef9aae6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -0,0 +1,15 @@ +#include +#include +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; +} \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 930ffaf..fd79814 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,8 +1,5 @@ -if(TEST_BPT_ONLY) +if(OJ_TEST_BPT) add_executable(code oj_test_interface_for_bpt.cpp) target_link_libraries(code argparse) 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() \ No newline at end of file