我们应该使用我们自己的数学函数吗?选项(USE_MYMATH “使用教程提供的数学实现” ON )
这个选项会显示在CMake的GUI,并且其默认值为ON。当用户选择了之后,这个值会被保存在CACHE中,这样就不需要每次CMAKE都进行更改了。下面一步条件构建和链接MathFunctions库。为了达到这个目的,我们可以改变顶层的CMakeLists文件,使得其看起来像这样:
# 添加 MathFunctions 库?
#
if (USE_MYMATH)
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions)
set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)
# 添加可执行
文件 add_executable (教程tutorial.cxx)
target_link_libraries (教程${EXTRA_LIBS) })
这里使用了USE_MYMATH来决定MathFunctions是否会被编译和使用。注意这里变量EXTRA_LIBS的使用方法。这是保持一个大的项目看起来比较简洁的一个方法。源代码中相应的变化就比较简单了:
// 一个计算数字平方根的简单程序
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "TutorialConfig.h"
#ifdef USE_MYMATH
#include "MathFunctions.h "
#endif
int main (int argc, char *argv[])
{
if (argc < 2)
{
fprintf(stdout,"%s 版本 %d.%d\n", argv[0],
Tutorial_VERSION_MAJOR,
Tutorial_VERSION_MINOR);
fprintf(stdout,"用法: %s 数字\n",argv[0]);
返回1;
双
输入值 = atof(argv[1]);
#ifdef USE_MYMATH
双输出值 = mysqrt(inputValue);
#别的
双输出值 = sqrt(输入值);
#endif
fprintf(stdout,"%g 的平方根是 %g\n",
inputValue, outputValue);
返回0;
}
在源代码中我们同样使用了USE_MYMATH这个宏。它由CMAKE通过配置文件TutorialConfig.h.in来提供给源代码。
#cmake定义 USE_MYMATH
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!