当前位置: 首页 > Linux

cmake官方入门说明Step2+ubuntu16.04单程执行流程【未完】

时间:2023-04-07 00:05:35 Linux

添加一个库(第2步)现在我们将向我们的项目添加一个库。这个库将包含我们自己的用于计算数字平方根的实现。然后可执行文件可以使用这个库而不是编译器提供的标准平方根函数。让可执行程序能够使用这个库对于本教程,我们将把库放入名为MathFunctions的子目录中。在教程中,我们把这个库放到一个子目录文件MathFunctions中。这个目录已经包含了一个头文件MathFunctions.h和一个源文件mysqrt.cxx。源文件有一个名为mysqrt的函数,它提供与编译器的sqrt函数类似的功能。将以下一行CMakeLists.txt文件添加到MathFunctions目录:add_library(MathFunctionsmysqrt.cxx)要使用新库,我们将在顶层CMakeLists中添加一个add_subdirectory调用。txt文件,以便构建库。我们将新库添加到可执行文件中,并将MathFunction添加为包含目录,以便它们qsqrt.hhead可以找到er文件。顶级CMakeLists.txt文件的最后几行现在应该如下所示:#添加MathFunctions库add_subdirectory(MathFunctions)#添加可执行文件add_executable(Tutorialtutorial.cxx)target_link_libraries(TutorialPUBLICMathFunctions)#添加二叉树到搜索路径includefiles#以便我们找到TutorialConfig.htarget_include_directories(TutorialPUBLIC"${PROJECT_BINARY_DIR}""${PROJECT_SOURCE_DIR}MathFunctions")现在让我们将MathFunctions库设为可选。虽然对于本教程来说确实没有必要这样做,但对于较大的项目来说这是很常见的事情。第一步是在顶层添加一个选项CMakeLists.txtfile.option(USE_MYMATH"Usetutorialprovidedmathimplementation"ON)#configureaheaderfiletopasssomeoftheCMakesettings#tothesourcecodeconfigure_file(TutorialConfig.h.在TutorialConfig.h)这个选项将显示在CMakeGUI和ccmake的默认值为ON,可以由用户更改。此设置将存储在缓存中,这样用户就不需要每次在构建目录上运行CMake时都设置该值。下一个更改是使构建和链接MathFunctions库成为有条件的。为此,我们将顶层CMakeLists.txt文件的末尾更改为如下所示:添加可执行文件add_executable(Tutorialtutorial.cxx)target_link_libraries(TutorialPUBLIC${EXTRA_LIBS})#将二叉树添加到包含文件的搜索路径#这样我们就可以找到TutorialConfig.htarget_include_directories(TutorialPUBLIC"${PROJECT_BINARY_DIR}"${EXTRA_INCLUDES})注意使用变量EXTRA_LIBS来收集任何可选的库,以便稍后链接到可执行文件中。这变量EXTRA_INCLUDES类似地用于可选头文件。这是处理许多可选组件时的经典方法,我们将在下一步中介绍现代方法。对源代码的相应更改非常简单。首先,intutorial.cxx,如果我们需要它,请包含MathFunctions.hheader:#ifdefUSE_MYMATH#include"MathFunctions.h"#endif然后,在同一个文件中,makeUSE_MYMATH控制使用哪个平方根函数:#ifdefUSE\_MYMATHconstdoubleoutputValue\=mysqrt(inputValue);#elseconstdoubleoutputValue\=sqrt(inputValue);#endif由于源代码现在需要USE_MYMATH我们可以将它添加到TutorialConfig.h.inwiththefollowingline:#cmakedefineUSE_MYMATHExercise:WhyisimportantthatweconfigureTutorialConfig.h.在USE_MYMATH选项之后?如果我们将两者颠倒会发生什么?运行cmake或cmake-gui来配置项目,然后使用您选择的构建工具构建它。然后运行built教程可执行文件。使用ccmake或CMakeGUI更新USE_MYMATH的值。重新构建并再次运行教程。哪个函数提供更好的结果,sqrt或mysqrt?