Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix CMake #891

Open
wants to merge 71 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
92a6d7c
Added TODO.CMake
sgeto Apr 10, 2018
179081f
Increased cmake_minimum_required to 3.0
sgeto Apr 10, 2018
0db32a6
Updated .gitignore
sgeto Apr 10, 2018
7df66aa
Shorten lines to under 80 characters and added some tweaks to FindGTK…
sgeto Apr 10, 2018
ca4f28a
Added solution for missing GTK2_GDKCONFIG_INCLUDE_DIR GTK2_GLIBCONFIG…
sgeto Apr 10, 2018
e87a7b7
Set PKG_CONFIG_USE_CMAKE_PREFIX_PATH before searching for GTK2 in win…
sgeto Apr 11, 2018
6534dce
Temporary fixes for locating glibconfig.h (GTK3)
sgeto Apr 11, 2018
f12e21e
Ship our own FindCurses.cmake and don't build the curses interface by…
sgeto Apr 11, 2018
d2a6837
Simplified macro_ensure_out_of_source_build()
sgeto Apr 11, 2018
88691d3
Don't limit CMAKE_BUILD_TYPE
sgeto Apr 11, 2018
fa4aa14
Avoid install ettercap desktop files on Windows
sgeto Apr 11, 2018
77d5350
Got rid of SPECIAL_LIB_DIR
sgeto Apr 11, 2018
f9765e7
Include EttercapOSTest.cmake as early as possible
sgeto Apr 11, 2018
b6cbcd9
Removed a leftover comment
sgeto Apr 11, 2018
0967d08
Added VERSION into project()
sgeto Apr 11, 2018
eac3ea7
Append our CMAKE_MODULE_PATH to any existing one, don't override them.
sgeto Apr 11, 2018
f0951ce
Added win32 specific macro to config.h and unified OS_MINGW with OS_W…
sgeto Apr 11, 2018
c3bf4e4
Use cmake_dependent_option() to exclude GTK and Curses UI from LIBRAR…
sgeto Apr 11, 2018
0dc7b65
Use LIBRARY_BUILD throughout when building just libettercap
sgeto Apr 11, 2018
c535638
Check for and set proper INSTALL_SYSCONFDIR
sgeto Apr 11, 2018
48a436c
Divide top-level CMakeLists.txt into sections pt. 1
sgeto Apr 11, 2018
45b2247
Removed our custom build flags for release builds
sgeto Apr 11, 2018
97a57a0
Reworked (how we deal with) [debug] compile flags
sgeto Apr 13, 2018
41fbcc1
Look quietly for Freetype
sgeto Apr 13, 2018
b5fbf93
GTK3 is the default GTK_BUILD_TYPE again.
sgeto Apr 13, 2018
13e73cb
Removed dead ASAN support stuff
sgeto Apr 13, 2018
7dfb454
Divide top-level CMakeLists.txt into sections pt. 2
sgeto Apr 13, 2018
28b7945
CheckVariableInHeaders.cmake is out
sgeto Apr 13, 2018
707e994
Check for arpa/nameser.h and nameser.h
sgeto Apr 13, 2018
48803c9
Automatically add CMAKE_CURRENT_SOURCE_DIR and CMAKE_CURRENT_BINARY_DIR
sgeto Apr 13, 2018
0a9129c
Improved finding and linkink with ncurses libraries
sgeto Apr 13, 2018
b1b48f2
FindCurses.cmake is back
sgeto Apr 13, 2018
f0ea954
Reduced use of include_directories() and separated library dependencies
sgeto Apr 14, 2018
bd1daf4
Fixed a typo
sgeto Apr 14, 2018
c6b1234
Improved FindGTK3.cmake
sgeto Apr 14, 2018
c3a3adb
Added CURSES_NEED_WIDE as user option
sgeto Apr 14, 2018
d6d8ba4
Introduced support for Pthreads-win32 (a.k.a. pthreads4w)
sgeto Apr 17, 2018
b55aaf9
Fixing build failure on MacOSX
sgeto Apr 17, 2018
3d79321
Only check for HAVE_UTF8 if the HAVE_ICONV check failed
sgeto Apr 17, 2018
bd32752
Enabled plug-ins support on Windows
sgeto Apr 17, 2018
4920b43
Drop our local FindCURL.cmake
sgeto Apr 17, 2018
f8d434b
Improved finding and linking with libpcap
sgeto Apr 17, 2018
23edc36
Look for iconv.h too
sgeto Apr 17, 2018
46b625b
Added ENABLE_UTILS option
sgeto Apr 24, 2018
ff44b2c
Added BUILD_SHARED_LIBS option (WIP)
sgeto Apr 24, 2018
72d8a68
Improved our FindPTHREADS-WIN32.cmake module
sgeto Apr 24, 2018
8857492
Improved GeoIP support
sgeto Apr 24, 2018
1bb9f24
Tweaks for finding dn_expand()
sgeto Apr 24, 2018
d973df7
Fix indentation in cmake/Modules/FindGEOIP.cmake
sgeto Apr 24, 2018
cad8e34
Updated and extended PCRE support
sgeto Apr 24, 2018
d04def3
Simplified iconv check
sgeto May 1, 2018
f28b2b9
Updated and extended libnet support
sgeto May 1, 2018
28625a8
Updated and extended check support
sgeto May 1, 2018
fb594f1
Improved test_verbose target
sgeto May 1, 2018
4d8bf95
Link unit test with our new import target CHECK::CHECK
sgeto May 1, 2018
02f4326
Added IP6 decoder test case
sgeto May 1, 2018
630d180
Flex and Bison are required
sgeto May 1, 2018
bf4783b
Enabled Daemon interface (WIP)
sgeto May 1, 2018
1abe790
Updated and extended groff support
sgeto May 3, 2018
7fb80d1
Updated and extended luajit support (WIP)
sgeto May 3, 2018
d198009
Merged EttercapHeadersCheck.cmake & EttercapVariableCheck.cmake into …
sgeto May 3, 2018
421f741
Cleaned up include lists EttercapLibCheck.cmake
sgeto May 3, 2018
ed22068
Moved build parameters to EttercapBuildParameters.cmake
sgeto May 3, 2018
9bf1fb1
Frist argument to list(APPEND ...) is already considered a variable
sgeto May 3, 2018
f0d6512
Fixed a merge conflict
sgeto May 15, 2018
8973715
Adjust required version for GeoIP package to 1.6.0
Apr 7, 2019
3ffc626
make cmake-lint happy - fix tab in FindLUAJIT.cmake
Jun 27, 2018
ca87ac2
WITH_IPV6 definition must be defined in case ENABLE_IPV6 has been set
Apr 7, 2019
6504f24
changed CMake variable name for libnet library
Apr 8, 2019
ecedfb5
traditionally link if imported target CHECK::CHECK is not defined
Apr 18, 2019
7c73236
Remove Cmake list duplicates only if list exists
Apr 19, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ tags
gmon.out
ettercap-*_debug.log
libwdg-*_debug.log
build/
build*
include/config.h
/obj-*/
CMakeFiles
CMakeCache.txt
278 changes: 172 additions & 106 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,41 +1,36 @@
cmake_minimum_required(VERSION 2.8)
project(ettercap C)
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(ettercap VERSION 0.8.3 LANGUAGES C)

set(VERSION "0.8.2")

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
# Include our cmake modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
set(CMAKE_SCRIPT_PATH "${CMAKE_SOURCE_DIR}/cmake/Scripts")

include(MacroEnsureOutOfSourceBuild)
macro_ensure_out_of_source_build("${PROJECT_NAME} requires an out of source build.
Please create a separate build directory and run 'cmake /path/to/${PROJECT_NAME} [options]' there.")
include(EttercapMacrosAndFunctions)

ensure_out_of_source_build()

include(EttercapOSTest)

# USER OPTIONS
# ============

include(CMakeDependentOption)

cmake_dependent_option(ENABLE_CURSES "Enable curses interface" ON
"NOT OS_WINDOWS;NOT LIBRARY_BUILD" OFF)

option(ENABLE_CURSES "Enable curses interface" ON)
option(ENABLE_GTK "Enable GTK interface" ON)
cmake_dependent_option(ENABLE_GTK "Enable GTK interface" ON
"NOT LIBRARY_BUILD" OFF)
option(ENABLE_PLUGINS "Enable plugins support" ON)
option(ENABLE_IPV6 "Enable IPv6 support" OFF)
option(ENABLE_LUA "Enable LUA support (EXPERIMENTAL)" OFF)
option(ENABLE_PDF_DOCS "Enable PDF document generation" OFF)
option(ENABLE_TESTS "Enable Unit Tests" OFF)
option(ENABLE_GEOIP "Build with GeoIP support" ON)
option(LIBRARY_BUILD "Build for libettercap only" OFF)
option(INSTALL_DESKTOP "Install ettercap desktop files" ON)


set(VALID_BUILD_TYPES Debug Release RelWithDebInfo)

if(NOT CMAKE_BUILD_TYPE)
# Default to using "Release" as our build type.
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: ${VALID_BUILD_TYPES}." FORCE)
endif()
list(FIND VALID_BUILD_TYPES ${CMAKE_BUILD_TYPE} contains_valid)
if(contains_valid EQUAL -1)
message(FATAL_ERROR "Unknown CMAKE_BUILD_TYPE: '${CMAKE_BUILD_TYPE}'. Valid options are: ${VALID_BUILD_TYPES}")
endif()
unset(contains_valid)

include(CMakeDependentOption)
cmake_dependent_option(INSTALL_DESKTOP "Install ettercap desktop files" ON
"NOT OS_WINDOWS" OFF)

# If SYSTEM_LIBS is set to off, then all SYSTEM_* options will be
# set to off.
Expand All @@ -46,114 +41,178 @@ Disabling this implies that we would only use bundled libraries." ON)
# If BUNDLED_LIBS is set to off, then all BUNDLED_* options will be
# set to off.
option(BUNDLED_LIBS
"Use bundled libraries if system provided versions are not found (or disabled)" ON)
"Use bundled libraries if system provided \
versions are not found (or disabled)" ON
)

cmake_dependent_option(SYSTEM_CURL
"Search for a system-provided version of Curl" ON
SYSTEM_LIBS OFF)
SYSTEM_LIBS OFF
)

cmake_dependent_option(BUNDLED_CURL
"Use bundled version of Curl if system-provided version is not found (or disabled)" ON
BUNDLED_LIBS OFF)
"Use bundled version of Curl if system-provided \
version is not found (or disabled)" ON
BUNDLED_LIBS OFF
)

cmake_dependent_option(SYSTEM_LIBNET
"Search for a system-provided version of LIBNET" ON
SYSTEM_LIBS OFF)
SYSTEM_LIBS OFF
)

cmake_dependent_option(BUNDLED_LIBNET
"Use bundled version of LIBNET if system-provided version is not found (or disabled)" ON
BUNDLED_LIBS OFF)
"Use bundled version of LIBNET if system-provided \
version is not found (or disabled)" ON
BUNDLED_LIBS OFF
)

cmake_dependent_option(SYSTEM_LUAJIT
"Search for a system-provided version of LUAJIT" ON
"SYSTEM_LIBS;ENABLE_LUA" OFF)
"SYSTEM_LIBS;ENABLE_LUA" OFF
)

cmake_dependent_option(BUNDLED_LUAJIT
"Use bundled version of LUAJIT if system-provided version is not found (or disabled)" ON
"BUNDLED_LIBS;ENABLE_LUA" OFF)
"Use bundled version of LUAJIT if system-provided \
version is not found (or disabled)" ON
"BUNDLED_LIBS;ENABLE_LUA" OFF
)

if(ENABLE_TESTS)
cmake_dependent_option(SYSTEM_LIBCHECK
"Search for a system-provided version of LIBCHECK" ON
SYSTEM_LIBS OFF)

cmake_dependent_option(BUNDLED_LIBCHECK
"Use bundled version of LIBCHECK if system-provided version is not found (or disabled)" ON
BUNDLED_LIBS OFF)
cmake_dependent_option(SYSTEM_LIBCHECK
"Search for a system-provided version of LIBCHECK" ON
SYSTEM_LIBS OFF
)

cmake_dependent_option(BUNDLED_LIBCHECK
"Use bundled version of LIBCHECK if system-provided \
version is not found (or disabled)" ON
BUNDLED_LIBS OFF
)
endif()

set(SPECIAL_LIB_DIR "" CACHE PATH "Special (non-traditional) root directory where headers/libraries are installed")

# XXX - you look lost...
include(CheckVariableInHeaders)
include(EttercapOSTest)

#Check and see if we're running Darwin, specify the CMAKE_LIBARY_PATH to do so
if(OS_DARWIN)
set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_LIBRARY_PATH ${SPECIAL_LIB_DIR}/lib ${CMAKE_LIBRARY_PATH})
set(CMAKE_INCLUDE_PATH ${SPECIAL_LIB_DIR}/include ${CMAKE_INCLUDE_PATH})
else()
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} /usr/lib64 /usr/lib32)
endif()

if(LIBRARY_BUILD)
set(ENABLE_GTK OFF)
set(ENABLE_CURSES OFF)
set(JUST_LIBRARY 1)
# XXX - remove this or move this lower
if(NOT OS_DARWIN AND NOT OS_WINDOWS)
set(FIND_LIBRARY_USE_LIB32_PATHS 1)
set(FIND_LIBRARY_USE_LIB64_PATHS 1)
endif()

# XXX - move this lower
include(EttercapHeadersCheck)
include(EttercapLibCheck)
include(EttercapVariableCheck)

# INSTALL AND/OR OUTPUT DIRECTORIES
# =================================

set(INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix")
set(INSTALL_SYSCONFDIR /etc CACHE PATH "System configuration directory")
set(INSTALL_LIBDIR ${INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH "Library installation directory")
set(INSTALL_DATADIR ${INSTALL_PREFIX}/share CACHE PATH "Data installation directory")

if(UNIX)
set(INSTALL_SYSCONFDIR /etc CACHE PATH "System configuration directory")
else()
set(INSTALL_SYSCONFDIR
${INSTALL_PREFIX}/etc CACHE PATH "System configuration directory"
)
endif()

set(INSTALL_LIBDIR
${INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH
"Library installation directory"
)

set(INSTALL_DATADIR
${INSTALL_PREFIX}/share CACHE PATH "Data installation directory"
)

set(INSTALL_EXECPREFIX ${INSTALL_PREFIX} CACHE PATH "")
set(INSTALL_BINDIR ${INSTALL_PREFIX}/bin CACHE PATH "Binary files installation directory")
set(INSTALL_BINDIR
${INSTALL_PREFIX}/bin CACHE PATH "Binary files installation directory"
)

if(OS_DARWIN OR OS_WINDOWS)
set(POLKIT_DIR ${INSTALL_PREFIX}/share/polkit-1/actions/ CACHE PATH "Polkit installation directory")
set(POLKIT_DIR
${INSTALL_PREFIX}/share/polkit-1/actions/ CACHE PATH
"Polkit installation directory"
)
else()
#at least on ubuntu, polkit dir couldn't be /usr/local/share, but should be /usr/share
set(POLKIT_DIR /usr/share/polkit-1/actions/ CACHE PATH "Polkit installation directory")
# at least on ubuntu, polkit dir couldn't be /usr/local/share,
# but should be /usr/share
set(POLKIT_DIR
/usr/share/polkit-1/actions/ CACHE PATH "Polkit installation directory"
)
endif()
set(PKEXEC_INSTALL_WRAPPER org.pkexec.ettercap CACHE PATH "Name of the pkexec action file")
set(DESKTOP_DIR ${INSTALL_PREFIX}/share/applications/ CACHE PATH "Desktop file installation directory")
set(APPDATA_DIR ${INSTALL_PREFIX}/share/appdata/ CACHE PATH "Appdata file installation directory")
set(ICON_DIR ${INSTALL_PREFIX}/share/pixmaps CACHE PATH "Icon file installation directory")
set(MAN_INSTALLDIR ${INSTALL_PREFIX}/share/man CACHE PATH "Path for manual pages")

set(PKEXEC_INSTALL_WRAPPER
org.pkexec.ettercap CACHE PATH "Name of the pkexec action file"
)

set(DESKTOP_DIR
${INSTALL_PREFIX}/share/applications/ CACHE PATH
"Desktop file installation directory"
)

set(APPDATA_DIR
${INSTALL_PREFIX}/share/appdata/ CACHE PATH
"Appdata file installation directory"
)

set(ICON_DIR
${INSTALL_PREFIX}/share/pixmaps CACHE PATH "Icon file installation directory"
)

set(MAN_INSTALLDIR
${INSTALL_PREFIX}/share/man CACHE PATH "Path for manual pages"
)

# XXX - remove this or move this into correct section
if(NOT DISABLE_RPATH)
# Ensure that, when we link to stuff outside of our build path, we include the
# library dir path in our RPATH.
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_MACOSX_RPATH 1)
endif()

# set general build flags for debug build-type
set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb3 -DDEBUG -Wall -Wno-pointer-sign -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Wextra -Wredundant-decls" CACHE STRING "" FORCE)
## append ASAN build flags if compiler version has support
#if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
# if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 4.8)
# set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address
# -fno-omit-frame-pointer" CACHE STRING "" FORCE)
# message("Building with ASAN support (GNU compiler)")
# else()
# message("Building without ASAN support (GNU compiler)")
# endif()
#elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
# if(CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.1)
# set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address
# -fno-omit-frame-pointer" CACHE STRING "" FORCE)
# message("Building with ASAN support (Clang compiler)")
# elseif(CMAKE_C_COMPILER_VERSION VERSION_GREATER 3.1)
# message("Building without ASAN support (Clang compiler)")
# endif()
#endif()

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is / was meant only for debugging. So to easily be able to enable ASAN support for troubleshooting memory issues.
Is this somewhere else able to be just, switched on?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll try to add these features as an independent make target.
I saw something similar before so it should be possible.

I think one TODO is enough.

Me too, I hope I will be able to delete my todo by the end of this PR.
Wish me luck 😄

# set build flags for release build-type
set(CMAKE_C_FLAGS_RELEASE "-O2 -w -D_FORTIFY_SOURCE=2" CACHE STRING "" FORCE)
# GLOBAL BUILD FLAGS
# ==================

# XXX - move this line to EttercapOSTest.cmake
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)

set(VALID_BUILD_TYPES "Debug, Release, RelWithDebInfo and MinSizeRel")
if(NOT CMAKE_BUILD_TYPE AND NOT "${IS_MULTI_CONFIG}")
# On "single-configuration generators", default to the "Release" build type.
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: ${VALID_BUILD_TYPES}." FORCE
)
endif()

add_definitions(-D_FORTIFY_SOURCE=2)

if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_CONFIGURATION_TYPES)
# Set build flags for debug builds

add_definitions(-DDEBUG)
add_definitions(-D_DEBUG)

# Check and add compiler options if they exist.
# ---------------------------------------------
#
# You may add any kind of compiler flag to this.
# If your compiler supports it, it will be added, if not, it will be skipped.
check_and_add_compiler_option(-O0)
check_and_add_compiler_option(-ggdb3)
check_and_add_compiler_option(-Wall)
check_and_add_compiler_option(-Wno-pointer-sign)
check_and_add_compiler_option(-Wformat)
check_and_add_compiler_option(-Werror=format-security)
check_and_add_compiler_option(-Wextra)
check_and_add_compiler_option(-Wredundant-decls)
check_and_add_compiler_option(-W4) # MSVC only
check_and_add_compiler_option(-Wused-but-marked-unused) # Clang/llVM only
endif()

if(OS_DARWIN)
set(CMAKE_EXE_LINKER_FLAGS "-Wl" CACHE STRING "" FORCE)
Expand All @@ -166,7 +225,10 @@ if(ENABLE_LUA)
set(HAVE_EC_LUA 1)
endif()

set(EC_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/include ${CMAKE_SOURCE_DIR}/include ${EC_INCLUDE})
set(EC_INCLUDE_PATH ${CMAKE_CURRENT_BINARY_DIR}/include
${CMAKE_SOURCE_DIR}/include ${EC_INCLUDE}
)

include_directories(${EC_INCLUDE_PATH})

add_subdirectory(src)
Expand All @@ -176,22 +238,24 @@ if(INSTALL_DESKTOP)
endif()

if(HAVE_PLUGINS)
if(OS_MINGW)
message("Sorry, plugins support on Windows is currently unavailable")
else()
add_subdirectory(plug-ins)
endif()
if(OS_WINDOWS)
message("Sorry, plugins support on Windows is currently unavailable")
else()
add_subdirectory(plug-ins)
endif()
endif()
add_subdirectory(utils)
add_subdirectory(share)
add_subdirectory(man)

if(ENABLE_IPV6)
set(WITH_IPV6 TRUE)
set(WITH_IPV6 TRUE)
endif()

# This line should ALWAYS be after all options are defined
configure_file(include/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/config.h)
configure_file(include/config.h.cmake
${CMAKE_CURRENT_BINARY_DIR}/include/config.h
)

if(ENABLE_TESTS)
enable_testing()
Expand All @@ -200,12 +264,14 @@ endif()

# uninstall target
configure_file(
"${CMAKE_SCRIPT_PATH}/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
"${CMAKE_SCRIPT_PATH}/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY
)

add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
)

# Add a target that will ensure that the build directory is properly cleaned.
add_custom_target(clean-all
Expand Down
Loading