说明
本文档只说明与官方文档的不同的地方,也就是说我在跟着官方文档走的时候我出现的问题的解决方法
安装
首先是MathFunctions的CMakeLists.txt
add_library(MathFunctions mysqrt.cxx) target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR} ) install(TARGETS MathFunctions DESTINATION lib) install(FILES MathFunctions.h DESTINATION include)
然后是Step4的CMakeLists.txt
cmake_minimum_required(VERSION 3.10) project(Tutorial VERSION 1.0) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) option(USE_MYMATH "Use tutorial provided math implementation" ON) if(USE_MYMATH) add_subdirectory(MathFunctions) list(APPEND EXTRA_LIBS MathFunctions) endif() configure_file(TutorialConfig.h.in TutorialConfig.h) # 添加子目录 # add_subdirectory(MathFunctions) add_executable(Tutorial tutorial.cxx) target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS}) # 添加${PROJECT_BINARY_DIR}是为了能够找到TutorialConfig.h # 添加${PROJECT_SOURCE_DIR}/MathFunctions是为了找到mysqrt.h target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}" ) install(TARGETS Tutorial DESTINATION bin) install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h" DESTINATION include) #启动测试 enable_testing() #测试 add_test(NAME Runs COMMAND Tutorial 25) #测试不加参数 add_test(NAME Usage COMMAND Tutorial) #给这个测试增加属性,通过PASS_REGULAR_EXPRESSION判断输出的结果是否包含后面的字符串 set_tests_properties(Usage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:./Tutorialnumber") #定义一个函数用来测试 #第一个是函数名do_test,后面是参数 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(do_test target arg result) #调用函数 do_test(Tutorial 4 "4 is 2") do_test(Tutorial 9 "9 is 3") do_test(Tutorial 5 "5 is 2.236") do_test(Tutorial 7 "7 is 2.645") do_test(Tutorial 25 "25 is 5") do_test(Tutorial -25 "-25 is [-nan|nan|0]") do_test(Tutorial 0.0001 "0.0001 is 0.01")
最后执行cmake命令
#此时的目录结构 Step4 MathFunctions CMakeLists.txt MathFunctions.h mysqrt.cxx CMakeLists.txt tutorial.cxx TutorialConfig.h.in #首先创建目录 mkdir step4_build && cd step4_build cmake ../Step4/ #构建 cmake --build . #安装,按照官方文档使用cmake --install .,但是我这里没反应,所以我用了make命令 #两种方式,一种是直接安装,安装的结果在/usr/local/bin,include和lib下面,另一种是加参数CMAKE_INSTALL_PREFIX,指定了安装的目录,如下 sudo make install sudo make install CMAKE_INSTALL_PREFIX=/home/ubuntu/mycmake/build #在目录step4_build下面,执行命令进行测试 make test