# package: find external packages include(FindPkgConfig) # package: required boost libraries set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED OFF) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost 1.44 COMPONENTS filesystem program_options system serialization date_time REQUIRED) # package: boost-custom include_directories(${CMAKE_SOURCE_DIR}/lib/boost-custom) # package: boost-net-dns include_directories(${CMAKE_SOURCE_DIR}/lib/boost-net-dns) # package: libi2ncommon pkg_check_modules(I2NCOMMON REQUIRED libi2ncommon) include_directories(${I2NCOMMON_INCLUDE_DIRS}) link_directories(${I2NCOMMON_LIBRARY_DIRS}) # package: doxygen find_package(Doxygen) # compiler: include directories where the source code is located include_directories(${CMAKE_CURRENT_SOURCE_DIR}) # compiler: source code files set(SOURCES config/configuration.cpp config/configurationcommandline.cpp config/configurationfile.cpp config/configurationinterface.cpp config/configurationoptions.cpp config/configurationreader.cpp config/host.cpp config/option/daemonoption.cpp config/option/configfileoption.cpp config/option/configurationoption.cpp config/option/hostconfigurationoption.cpp config/option/hostpingintervaloption.cpp config/option/hostpingprotocoloption.cpp config/option/hostportoption.cpp config/option/hostnameoption.cpp config/option/hostsourcenetworkinterfaceoption.cpp config/option/hostsdownlimitoption.cpp config/option/linkdownintervaloption.cpp config/option/linkupintervaloption.cpp config/option/logleveloption.cpp config/option/logoutputoption.cpp config/option/logfileoption.cpp config/option/nameserveroption.cpp config/option/pingfaillimitoption.cpp config/option/sourcenetworkinterfaceoption.cpp config/option/statusnotifiercmdoption.cpp config/option/versionoption.cpp config/option/ratiorandomhostsoption.cpp config/option/pingreplytimeoutoption.cpp config/option/maxaddressresolutionattemptsoption.cpp config/option/resolvedipttlthresholdoption.cpp config/option/mintimebetweenresolvesoption.cpp config/option/dnscachefileoption.cpp dns/timetolive.cpp dns/hostaddress.cpp dns/dnsipprotocol.cpp dns/dnscache.cpp dns/resolverbase.cpp dns/dnsresolver.cpp dns/dnsmaster.cpp host/hoststatus.cpp host/pingstatus.cpp host/loglevel.cpp host/logoutput.cpp host/messagepayload.cpp host/networkinterfacelist.cpp host/pinger.cpp host/pingerfactory.cpp host/pinginterval.cpp host/pingnumber.cpp host/pingprotocol.cpp host/pingscheduler.cpp tools/pcap.cpp icmp/icmpdata.cpp icmp/icmpdata_pingfailreply.cpp icmp/icmpechodata.cpp icmp/icmpdestinationunreachabledata.cpp icmp/icmptimeexceededdata.cpp icmp/icmpheader.cpp icmp/icmppacket.cpp icmp/icmppinger.cpp icmp/icmppacketfactory.cpp ip/ipheader.cpp ip/ipv4header.cpp ip/ipv6header.cpp link/linkstatus.cpp link/statusnotifiercommand.cpp tcp/tcpheader.cpp tcp/tcppinger.cpp tcp/tcpipv4segment.cpp tcp/tcpipv6segment.cpp tcp/tcpsegment.cpp tcp/tcpsegmentfactory.cpp boost_assert_handler.cpp main.cpp ) # documentation: add a target to generate API documentation with Doxygen if(DOXYGEN_FOUND) configure_file( ${CMAKE_SOURCE_DIR}/doc/doxyfile.in ${CMAKE_BINARY_DIR}/doc/Doxyfile @ONLY ) add_custom_target( doc ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/doc/Doxyfile WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/doc COMMENT "Generating API documentation with Doxygen" VERBATIM ) endif(DOXYGEN_FOUND) # compiler: creates the binary add_executable(${TARGET} ${SOURCES}) # linker: link the program against the libraries target_link_libraries( ${TARGET} Boost::filesystem Boost::program_options Boost::system Boost::serialization Boost::date_time ${I2NCOMMON_LIBRARIES} pthread ) # creates the install rule for the binary install(TARGETS ${TARGET} DESTINATION bin) # create a library from the same files to feed into the linker for tools add_library(lib_for_tools STATIC ${SOURCES}) target_link_libraries(lib_for_tools pthread) # now create an executable for tools/feed_packet_data that depends on lib_for_tools set(feed_packet_data_SOURCES tools/pcap.cpp tools/feed_packet_data.cpp) add_executable(feed_packet_data ${feed_packet_data_SOURCES}) target_link_libraries( feed_packet_data lib_for_tools Boost::filesystem Boost::program_options Boost::system Boost::serialization Boost::date_time ${I2NCOMMON_LIBRARIES} ) # no install! install(TARGETS feed_packet_data DESTINATION bin)