本文主要来自于ns3的官方文档:4.3. Working with CMake — Manual,不过只包含以下部分:
4.3. 使用CMake
4.3.1. 配置项目
4.3.1.1. 使用ns3配置项目
4.3.1.2. 使用CMake配置项目
4.3.2. 手动刷新CMake缓存
4.3.3. 建设项目
4.3.3.1. 使用ns3构建项目
4.3.3.2. 使用CMake构建项目
4.3. 使用CMake
ns-3项目过去使用Waf构建系统,但在ns-3.36版本中已转移到CMake。
CMake非常冗长,对于基本操作来说,命令可能非常长。
包装器脚本ns3对CMake隐藏了大部分详细信息,并为命令行用户提供了一个类似Waf的界面。
这是建议使用ns-3的方法,除非您使用的IDE支持可以使用CMake或CMake项目生成的项目。
4.3.1. 配置项目
在获得代码后,无论是克隆ns-3-dev存储库还是下载发布tarball,您都需要配置项目来处理它。
有两种方法可以配置项目:最简单的方法是使用ns3脚本,另一种方法是直接使用CMake。
4.3.1.1. 使用ns3配置项目
导航到ns-3-dev目录,然后运行/ns3 configure--打印配置选项的帮助,要在发布模式下配置ns-3,同时启用示例和测试,请运行./ns3 configure -d release --enable-examples --enable-tests
。要检查哪些底层命令执行,请添加--dry-run选项:
~/ns-3-dev$ ./ns3 --dry-run configure -d release --enable-examples --enable-tests
The following commands would be executed:
mkdir cmake-cache
cd cmake-cache; /usr/bin/cmake -DCMAKE_BUILD_TYPE=release -DNS3_NATIVE_OPTIMIZATIONS=OFF -DNS3_EXAMPLES=ON -DNS3_TESTS=ON -G Unix Makefiles .. ; cd ..
去掉dry run就可以正常configure了。
4.3.1.2. 使用CMake配置项目
进入ns-3-dev目录,创建一个CMake缓存文件夹,导航到该文件夹,然后运行指向ns-3-dev文件夹的CMake。
~$ cd ns-3-dev
~/ns-3-dev$ mkdir cmake-cache
~/ns-3-dev$ cd cmake-cache
~/ns-3-dev/cmake-cache$ cmake ..
可以向CMake命令传递额外的参数来配置它。要更改变量值,您应该使用后面跟着变量名的-D选项。
例如,构建类型存储在名为CMAKE_build_type的变量中。将其设置为下表中所示的CMake构建类型之一将更改与这些构建类型相关的编译器设置,并输出可执行文件和库名称,这些名称将接收后缀。
可以使用以下命令设置构建类型,该命令假定您的终端位于之前创建的缓存文件夹中。
~/ns-3-dev/cmake-cache$ cmake -DCMAKE_BUILD_TYPE=DEBUG ..
另一个常见的更改选项是生成器,它是CMake调用的真正的底层构建系统。CMake支持许多生成器,包括下表中列出的生成器。
要更改生成器,您需要传递其中一个带有-G选项的生成器。例如,如果我们更喜欢Ninja而不是默认的Makefiles,我们需要运行以下命令:
~/ns-3-dev/cmake-cache$ cmake -G Ninja ..
如果同一CMake缓存文件夹中存在不同的生成器文件,则此命令可能会失败。建议清理CMake缓存文件夹,然后重新创建它,并在第一次运行时重新配置生成器设置。
~/ns-3-dev/cmake-cache$ cd ..
~/ns-3-dev$ rm -R cmake-cache && mkdir cmake-cache && cd cmake-cache
~/ns-3-dev/cmake-cache$ cmake -DCMAKE_BUILD_TYPE=release -G Ninja ..
第一次配置后,设置将初始化为默认值,然后您可以使用ccmake命令手动更改它们,移动光标并设置所需值后,键入c以配置CMake。
如果您喜欢使用非交互式命令执行所有操作,请查看ns-3-dev目录中的主CMakeLists.txt文件。它包含大多数选项标志及其默认值。要启用示例和测试,请运行:
~/ns-3-dev/cmake-cache$ cmake -DNS3_EXAMPLES=ON -DNS3_TESTS=ON ..
4.3.2. 手动刷新CMake缓存
配置项目后,调用CMake将刷新CMake缓存。需要刷新才能发现新目标:自上次运行以来创建的库、可执行文件和/或模块。
刷新是通过从CMake缓存文件夹运行CMake命令来完成的。
~/ns-3-dev/cmake-cache$ cmake ..
CMakeCache.txt中存储的先前设置将被保留,同时将扫描新模块并添加目标。
还可以使用ns3包装器脚本刷新缓存:
~/ns-3-dev$ ./ns3 configure
4.3.3. build项目
构建项目有三种方式:使用ns3脚本、调用CMake和直接调用底层构建系统(例如Ninja)。最后一种方法被省略了,因为每个底层构建系统都有自己独特的命令行语法。
4.3.3.1. 使用ns3构建项目
ns3包装器脚本使命令行用户的生活更轻松,可以接受不带lib前缀的模块名称和不带scratch_前缀的scratch文件。以下命令可用于构建整个项目:
~/ns-3-dev$ ./ns3 build
要生成特定目标,请运行:
~/ns-3-dev$ ./ns3 build target_name
其中target_name是有效的目标名称。模块库的前缀是lib(例如libcore),scratch文件夹中的可执行文件的前缀是scratch_(例如scratch_scratch-simulator)。可执行文件目标的源文件名不带“.cc”前缀(例如sample-simulator.cc=>sample simulator)。