🌟 Good news, everyone! 🌟
This repository is now a community project under the OMNeT++ organisation.
Please update your submodules and file your contributions there.
This repository is a work-in-progress, and may never be fully be realised. It is substantially more likely that your use-case will not work out of the box, nor even after fiddling with the box. However, please do fiddle, and please help me improve it.
CMake Modules for building OMNeT++ projects and integrating with you CMake supporting editor.
These CMake modules were originally develeoped against OMNeT+ 5.X, but should also work with OMNeT++ 6.0 and beyond.
Please help me make this better!
The following is one of many other ways to do it.
-
Add the repository as a
gitsubmodule to your repository incmake.1git submodule add https://github.com/thor/omnetpp-cmake.git cmake
⚠ Note: If you have other CMake modules it is recommended that you replace
cmakewithcmake/omnetand so forth here and in the following steps. -
Update and/or initialise the submodule.1
git submodule update --init --recursive
-
Create a minimal
CMakeLists.txtin the root repository folder.project(YourProject) # It is recommended to increase the minimum version to your current cmake_minimum_required(VERSION 3.1) # Change "cmake" if you put the submodule in a different directory set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) find_package(OmnetPP 6.0 REQUIRED) # Import the required CMake module include(OMNet)
-
Update your
CMakeLists.txtwith your OMNeT++ project details# Uncomment the following if you have external dependencies like INET #find_path(INET_DIRNAMESsrc/inet/package.nedDOC "INET root directory") #import_opp_target(inet${INET_DIR}/src/Makefile) # Define your library/simulation sources set(SOURCES src/a.cc src/b.cc) add_library(project_library SHARED ${SOURCES}) # Define your messages as well set(MESSAGE_SOURCES messages/a.msg messages/b.msg) generate_opp_message(project_library MESSAGE_FILES ${MESSAGE_SOURCES}) # You will need to tweak and add the additional properties for your project set_target_properties(project_library PROPERTIES OUTPUT_NAME my_project_sim NED_FOLDERS src) # Link the libraries you need for your project; add "inet" if necessary target_link_libraries(project_library opp_interface) # This creates an OMNet++ CMake run for you add_opp_run(project_name CONFIG omnetpp.ini DEPENDENCY project_library)
-
generate_opp_message(<target>MESSAGE_FILES<file1> ...)
Generates and links a message file to a given target. -
import_opp_target(<opp_makemake_target><Makefile>[<cmake_target_file>])
Imports a target from a Makefile created by opp_makemake.
⚠ Note: The target must have the same name as in theMakefile! -
add_opp_build_target(<name>)
Adds a build target with a given name. -
add_opp_run(<name>[CONFIG<file>|WORKING_DIRECTORY<dir>|NED_FOLDERS<dir1> ...]DEPENDENCY<target>)
Adds a build target with a given name based on the given dependency. -
add_opp_test(<name>[CONFIG<file>|RUN<entry>|SIMTIME_LIMIT<limit>|SUFFIX<name>]) Adds a test target with a given name.
-
opp_interface -
opp_cmdenv -
opp_common -
opp_envir -
opp_eventlog -
opp_layout -
opp_main -
opp_nedxml -
opp_scave -
opp_sim -
opp_qtenv -
opp_qtenv-osg
For the full motivation and background please see Raphael Riebl's presentation at the 2015 OMNeT++ Summit.
Some benefits include:
- CMake's wide usage for C/C++ projects
- Convenient user interfaces available for configuring builds
- Solid dependency handling, both internal and external
- More accessible syntax compared to Makefiles
My motivation for forking this into a dedicated repository is primarily:
- Limit my build approach to one interface rather than the default two with OMNet++
- Allow me to integrate it with ease into other editors than Eclipse such as JetBrains CLion
- Try to make it work for OMNeT++ 6.0 preview release
There have been some changes which I don't trust (namely all of my own changes). These are primarily changes to make the proof-of-concept employed in Artery also work with OMNet++ 6.0. However, there are also some minor oddities and questions, uncertainties and the likes of which.
-
opp_cmake.pywill not take a lot of automatic definitions into account when importing a project -
clean_opp_messages()is unavailable as message files are no longer gathered in a single folder for buliding -
add_opp_rundoesn't seem to utilise the parameterNED_FOLDERS
The CMake modules were based on those in the OMNet++ V2X simulation framework in riebl/artery, which is where undefined licensed as GPL-2.0.
1: You could also just download the files and put them where you'd like, or if you want to help contribute, fork it and add that repository as a submodule! ↩
2: You may exchange the paths as you wish, but make sure to update them later on too. ↩