Func

1. cmake_minimum_required

cmake_minimum_required(VERSION 3.10)

2. project

project(Tutorials)

project(Tutorials VERSION 2.0)

project(${PROJECT_NAME}
  VERSION ${${PROJECT_NAME}_VERSION_MAJOR}
         .${${PROJECT_NAME}_VERSION_MINOR}
         .${${PROJECT_NAME}_VERSION_PATCH}

3. add_executable

add_executable(Tutorial src/tutorials.cxx)

4. configure_file

configure_file(config.h.in config.h)

5. target_include_directories

target_include_directories(Tutorial
  PUBLIC "${PROJECT_BINARY_DIR}"
)

target_include_directories(MathFunctions
  INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
)

target_include_directories(${PROJECT_NAME}
  INTERFACE include
)

target_include_directories(MathFunctions
  INTERFACE
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
  $<INSTALL_INTERFACE:include>
)

6. add_library

add_library(MathFunctions mysqrt.cxx)

add_library(${PROJECT_NAME} SHARED
    ${SRC_FILES}
)

add_library(${PROJECT_NAME}_static STATIC
    ${SRC_FILES}
)

7. add_subdirectory

add_subdirectory(3rdParty/MathFunctions)

8. target_link_libraries

target_link_libraries(Step2 PUBLIC
  MathFunctions
)

9. option

option(USE_MATH "Use my math functions" ON)

10. if

if(USE_MATH)
  add_subdirectory(3rdParty/MathFunctions)
  list(APPEND EXTRA_LIBS MathFunctions)
  list(APPEND EXTRA_INCLUDES
    "${PROJECT_SOURCE_DIR}/3rdParty/MathFunctions")
endif()

if(HAVE_LOG AND HAVE_EXP)
  target_compile_definitions(MathFunctions
    PRIVATE "HAVE_LOG" "HAVE_EXP"
)
endif()

if(line MATCHES "=")
  string(REGEX MATCH "^[^=]*" name ${line})
  string(REGEX MATCH "[^=]*$" value ${line})
  set(${name} ${value})
endif()

if(TARGET MySqrt)
  list(APPEND installable_libs MySqrt)
endif()

11. list

list(APPEND EXTRA_LIBS MathFunctions)

12. install

install(TARGETS MathFunctions
    DESTINATION lib
)

install(FILES MathFunctions.h
    DESTINATION include/MathFunctions
)

install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_static
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    RUNTIME DESTINATION bin
    INCLUDES DESTINATION include
)

install(DIRECTORY include
    DESTINATION include
)

install(TARGETS ${installable_libs}
    EXPORT MathFunctionsTargets
    LIBRARY DESTINATION lib
)

install(EXPORT MathFunctionsTargets
    FILE MathFunctionsTargets.cmake
    NAMESPACE ${PROJECT_NAME}::
    DESTINATION lib/cmake/MathFunctions
)

13. add_test

enable_testing()
add_test(NAME Usage COMMAND Step2)

14. set_tests_properties

set_tests_properties(Usage
    PROPERTIES_PASS_REGULAR_EXPRESSION "VERSION_MAJOR: .*"
)

15. function

function(do_test target arg result)
  add_test(NAME Comp${arg} COMMAND ${target} ${arg})
  set_tests_properties(Comp${arg}
    PROPERTIES PASS_REGULAR_EXPRESSION ${result}
  )
endfunction()

16. check_cxx_source_compiles

include(CheckCXXSourceCompiles)

check_cxx_source_compiles("
    #include <cmath>
    int main() {
        std::log(1.0);
        return 0;
    }
" HAVE_LOG)

17. target_compile_definitions

target_compile_definitions(MathFunctions
  PRIVATE "HAVE_LOG" "HAVE_EXP"
)

target_compile_definitions(
  PRIVATE "XI_DLL" "_CRT_SECURE_NO_WARNINGS"
)

18. add_custom_command

add_custom_command(
  OUTPUT ${PROJECT_SOURCE_DIR}/src/a_table.h
  COMMAND MakeATable ${PROJECT_SOURCE_DIR}/src/a_table.h
  DEPENDS MakeATable
)

19. enable_testing

enable_testing()

20. include

include(CheckCXXSourceCompiles)

include(InstallRequiredSystemLibraries)

include(CPACK)

include(CTest)

include(CMakePackageConfigHelpers)

21. file

file(STRINGS "config.txt" CONFIG_CONTENT)

file(GLOB_RECURSE SRC_FILES "src/*.cpp" "src/*.h")

file(GLOB SRC_FILES "src/*.cpp" "src/*.h")

22. foreach

foreach(line ${CONFIG_CONTENT})
    string(REGEX MTACH "^[^#]*" line ${line})
    if(line MATCHED "=")
        string(REGEX MATCH "^[^=]*" name ${line})
        string(REGEX MATCH "[^=]*$" value ${line})
        set(${name} ${value})
    endif()
endforeach()

23. set

set(CMAKE_CXX_STANDARD 11)

set(CMake_CXX_STANDARD_REQUIRED True)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")

24. configure_package_config_file

include(CMakePackageConfigHelpers)
configure_package_config_file(
    ${PROJECT_SOURCE_DIR}/config.cmake.in
    ${PROJECT_BINARY_DIR}/MathFunctionsConfig.cmake
    INSTALL_DESTINATION lib/cmake/MathFunctions
    NO_SET_AND_CHECK_MACRO
    NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

25. write_basic_package_version_file

write_basic_package_version_file(
    "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsConfigVersion.cmake"
    VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}"
    COMPATIBILITY AnyNewerVersion
)

26. export

export(EXPORT MathFunctionsTargets
  FILE "${CMAKE_CURRENT_BINARY_DIR}/MathFunctionsTargets.cmake"
)

27. find_package

find_package(MathFunctions CONFIG REQUIRED)

find_package(MathFunctions CONFIG
    REQUIRED COMPONENTS Step9::MyAdd
)

28. source_group

source_group("" FILES ${SRC_FILES})
source_group("Add" FILES ${SRC_ADD_FILES})

29. set_property

set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  PROPERTY VS_STARTUP_PROJECT ${PROJECT_NAME}
)
Copyright © gendloop 2024 all right reserved,powered by Gitbook该文件修订时间: 2026-04-03 03:43:16

results matching ""

    No results matching ""