我的CMAKE学习笔记
说明
本文档只说明与官方文档的不同的地方,也就是说我在跟着官方文档走的时候我出现的问题的解决方法
安装
首先是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
浙公网安备 33010602011771号