From 042b051f33f4e649f5c42201b7febc0b3bf95984 Mon Sep 17 00:00:00 2001 From: Riga27527 <596847942@qq.com> Date: Fri, 19 Aug 2022 22:03:25 +0800 Subject: [PATCH] Riga finished hw11 --- CMakeLists.txt | 24 ++++++++++++++++++------ mylib/CMakeLists.txt | 18 +++++++++++++++--- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cdec6a4..9234c3c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,26 +1,38 @@ # 为什么不指定 cmake_minimum_required 会导致下面在 project 处出错? -#cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.10) -project(hellocmake VERSION 3.1.4 LANGUAGES CXX) +project(hellocmake VERSION 3.1.4 LANGUAGES C CXX) # 如何让构建类型默认为 Release? -#set(CMAKE_BUILD_TYPE Release) +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() # 这样设置 C++14 的方式对吗?请改正 -set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++14") +# set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++14") +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDRAD_REQUIRED ON) # (可选)使用 ccache 加速编译 find_program(CCACHE_PROGRAM ccache) +if(CCACHE_PROGRAM) + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM}) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE_PROGRAM}) +endif() # legacy/CMakeLists.txt 和 mylib/CMakeLists.txt 里还有问题哦! add_subdirectory(legacy) add_subdirectory(mylib) # 这样需要一个个写出所有文件很麻烦,请改成自动批量添加源文件 -set(main_sources "src/main.cpp" "src/other.cpp" "src/dummy.cpp" "src/veryusefulfile.cpp") +# set(main_sources "src/main.cpp" "src/other.cpp" "src/dummy.cpp" "src/veryusefulfile.cpp") +file(GLOB main_sources CONFIGURE_DEPENDS src/*.cpp src/*.h) add_executable(main ${main_sources}) +target_link_libraries(main PUBLIC mylib) + # 请改为项目的正确版本(用变量来获取) -target_compile_definitions(main PRIVATE HELLOCMAKE_VERSION="233.33.33") +target_compile_definitions(main PRIVATE HELLOCMAKE_VERSION="${PROJECT_VERSION}") # (可选)添加 run 作为伪目标方便命令行调用 +add_custom_target(run COMMAND $) \ No newline at end of file diff --git a/mylib/CMakeLists.txt b/mylib/CMakeLists.txt index f25aeef..42d3bba 100644 --- a/mylib/CMakeLists.txt +++ b/mylib/CMakeLists.txt @@ -1,9 +1,21 @@ # 请改用自动批量查找所有 .cpp 和 .h 文件: -set(mylib_sources "mylib/mylib.cpp" "mylib/mylib.h") +# set(mylib_sources "mylib/mylib.cpp" "mylib/mylib.h") +# file(GLOB_RECURSE mylib_sources CONFIGURE_DEPENDS *.cpp *.h) + +aux_source_directory(mylib mylib_sources) # 使用 SHARED 在 Windows 上会遇到什么困难?请尝试修复! add_library(mylib SHARED ${mylib_sources}) -target_compile_definitions(mylib PRIVATE MYLIB_EXPORT) +set_property(TARGET mylib PROPERTY RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY LIBRARY_OUTPUT_DIRECTORY_DEBUG ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}) +set_property(TARGET mylib PROPERTY LIBRARY_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}) +target_compile_definitions(mylib PUBLIC MYLIB_EXPORT) # 这里应该用 PRIVATE 还是 PUBLIC? -target_include_directories(mylib PRIVATE .) +target_include_directories(mylib PUBLIC .)