Skip to content

Commit 554b98a

Browse files
authored
CMake cleanup (#7658)
This removes the object libraries and uses normal cmake targets. This helps simplifies a lot of the cmake since we can properly propagate usage requirements.
1 parent 02b0e87 commit 554b98a

File tree

15 files changed

+97
-184
lines changed

15 files changed

+97
-184
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ if(USE_BUNDLED_TINYXML2)
109109
add_subdirectory(externals/tinyxml2)
110110
endif()
111111
add_subdirectory(externals/simplecpp)
112+
add_subdirectory(externals/picojson)
112113
add_subdirectory(lib) # CppCheck Library
113114
add_subdirectory(frontend)
114115
add_subdirectory(cli) # Client application

cli/CMakeLists.txt

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,37 @@
1-
if (BUILD_CLI)
21

3-
file(GLOB hdrs "*.h")
4-
file(GLOB srcs "*.cpp")
5-
file(GLOB mainfile "main.cpp")
6-
list(REMOVE_ITEM srcs ${mainfile})
2+
file(GLOB hdrs "*.h")
3+
file(GLOB srcs "*.cpp")
4+
file(GLOB mainfile "main.cpp")
5+
list(REMOVE_ITEM srcs ${mainfile})
76

8-
add_library(cli_objs OBJECT ${hdrs} ${srcs})
9-
target_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/frontend/)
10-
if(USE_BUNDLED_TINYXML2)
11-
target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/)
12-
else()
13-
target_include_directories(cli_objs SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS})
14-
endif()
15-
target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/)
16-
target_externals_include_directories(cli_objs PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/)
17-
if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
18-
target_precompile_headers(cli_objs PRIVATE precompiled.h)
19-
endif()
20-
if (BUILD_CORE_DLL)
21-
target_compile_definitions(cli_objs PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT)
22-
endif()
7+
add_library(cli ${hdrs} ${srcs})
8+
target_include_directories(cli PUBLIC .)
9+
target_link_libraries(cli PRIVATE cppcheck-core frontend tinyxml2 simplecpp picojson)
10+
if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
11+
target_precompile_headers(cli PRIVATE precompiled.h)
12+
endif()
2313

24-
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13)
25-
# false positive warning in Clang 13 - caused by FD_ZERO macro
26-
set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier)
27-
endif()
14+
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 13)
15+
# false positive warning in Clang 13 - caused by FD_ZERO macro
16+
set_source_files_properties(processexecutor.cpp PROPERTIES COMPILE_FLAGS -Wno-reserved-identifier)
17+
endif()
2818

29-
list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile} $<TARGET_OBJECTS:cli_objs> $<TARGET_OBJECTS:frontend_objs>)
30-
if (NOT BUILD_CORE_DLL)
31-
list(APPEND cppcheck_SOURCES $<TARGET_OBJECTS:cppcheck-core>)
32-
list(APPEND cppcheck_SOURCES $<TARGET_OBJECTS:simplecpp_objs>)
33-
if(USE_BUNDLED_TINYXML2)
34-
list(APPEND cppcheck_SOURCES $<TARGET_OBJECTS:tinyxml2_objs>)
35-
endif()
36-
endif()
19+
if (BUILD_CLI)
20+
list(APPEND cppcheck_SOURCES ${hdrs} ${mainfile})
3721
if (WIN32)
3822
list(APPEND cppcheck_SOURCES version.rc)
3923
endif()
4024

4125
add_executable(cppcheck ${cppcheck_SOURCES})
42-
target_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/lib/)
43-
if(USE_BUNDLED_TINYXML2)
44-
target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/)
45-
else()
46-
target_include_directories(cppcheck SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS})
47-
endif()
48-
target_externals_include_directories(cppcheck PRIVATE ${PROJECT_SOURCE_DIR}/externals/simplecpp/)
49-
if (HAVE_RULES)
50-
target_link_libraries(cppcheck ${PCRE_LIBRARY})
51-
endif()
26+
target_link_libraries(cppcheck cppcheck-core cli tinyxml2 simplecpp)
5227
if (WIN32 AND NOT BORLAND)
5328
if(NOT MINGW)
5429
target_link_libraries(cppcheck Shlwapi.lib)
5530
else()
5631
target_link_libraries(cppcheck shlwapi)
5732
endif()
5833
endif()
59-
if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2)
60-
target_link_libraries(cppcheck ${tinyxml2_LIBRARIES})
61-
endif()
6234
target_link_libraries(cppcheck ${CMAKE_THREAD_LIBS_INIT})
63-
if (BUILD_CORE_DLL)
64-
target_link_libraries(cppcheck cppcheck-core)
65-
endif()
6635

6736
add_dependencies(cppcheck copy_cfg)
6837
add_dependencies(cppcheck copy_addons)

cmake/compileroptions.cmake

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,28 @@ function(target_externals_include_directories TARGET)
2424
endif()
2525
endfunction()
2626

27+
function(target_dll_compile_definitions TARGET)
28+
set(options)
29+
set(oneValueArgs IMPORT EXPORT)
30+
set(multiValueArgs)
31+
32+
cmake_parse_arguments(PARSE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
33+
if(PARSE_UNPARSED_ARGUMENTS)
34+
message(
35+
FATAL_ERROR "Unknown keywords given to target_dll_compile_definitions(): \"${PARSE_UNPARSED_ARGUMENTS}\"")
36+
endif()
37+
38+
39+
if (BUILD_SHARED_LIBS AND MSVC)
40+
if(PARSE_EXPORT)
41+
target_compile_definitions(${TARGET} PRIVATE ${PARSE_EXPORT})
42+
endif()
43+
if(PARSE_IMPORT)
44+
target_compile_definitions(${TARGET} INTERFACE ${PARSE_IMPORT})
45+
endif()
46+
endif()
47+
endfunction()
48+
2749
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
2850
add_compile_options(-Weverything)
2951
endif()

cmake/findDependencies.cmake

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@ else()
6161
endif()
6262

6363
if(NOT USE_BUNDLED_TINYXML2)
64+
add_library(tinyxml2 INTERFACE)
6465
find_package(tinyxml2 QUIET)
6566
if(TARGET tinyxml2::tinyxml2)
66-
set(tinyxml2_LIBRARIES "tinyxml2::tinyxml2")
67-
set(tinyxml2_INCLUDE_DIRS $<TARGET_PROPERTY:tinyxml2::tinyxml2,INTERFACE_INCLUDE_DIRECTORIES>)
67+
target_link_libraries(tinyxml2 INTERFACE tinyxml2::tinyxml2)
6868
else()
6969
find_library(tinyxml2_LIBRARIES tinyxml2)
7070
find_path(tinyxml2_INCLUDE_DIRS tinyxml2.h)
@@ -73,6 +73,8 @@ if(NOT USE_BUNDLED_TINYXML2)
7373
else()
7474
set(tinyxml2_FOUND 1)
7575
endif()
76+
target_link_libraries(tinyxml2 INTERFACE ${tinyxml2_LIBRARIES})
77+
target_include_directories(tinyxml2 INTERFACE ${tinyxml2_INCLUDE_DIRS})
7678
endif()
7779
endif()
7880

externals/picojson/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
add_library(picojson INTERFACE)
3+
target_externals_include_directories(picojson INTERFACE .)
4+

externals/simplecpp/CMakeLists.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
file(GLOB hdrs "*.h")
22
file(GLOB srcs "*.cpp")
33

4-
add_library(simplecpp_objs OBJECT ${srcs} ${hdrs})
5-
if (BUILD_CORE_DLL)
6-
target_compile_definitions(simplecpp_objs PRIVATE SIMPLECPP_EXPORT)
7-
endif()
4+
add_library(simplecpp ${srcs} ${hdrs})
5+
target_dll_compile_definitions(simplecpp EXPORT SIMPLECPP_EXPORT IMPORT SIMPLECPP_IMPORT)
86

97
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
10-
target_compile_options_safe(simplecpp_objs -Wno-zero-as-null-pointer-constant)
8+
target_compile_options_safe(simplecpp -Wno-zero-as-null-pointer-constant)
119
endif()
10+
11+
target_externals_include_directories(simplecpp PUBLIC .)

externals/tinyxml2/CMakeLists.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
file(GLOB hdrs "*.h")
22
file(GLOB srcs "*.cpp")
33

4-
add_library(tinyxml2_objs OBJECT ${srcs} ${hdrs})
5-
if (BUILD_CORE_DLL)
6-
target_compile_definitions(tinyxml2_objs PRIVATE TINYXML2_EXPORT)
7-
endif()
4+
add_library(tinyxml2 ${srcs} ${hdrs})
5+
target_dll_compile_definitions(tinyxml2 EXPORT TINYXML2_EXPORT IMPORT TINYXML2_IMPORT)
86

97
# TODO: needs to be fixed upstream
108
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
11-
target_compile_options(tinyxml2_objs PRIVATE -Wno-suggest-attribute=format)
12-
target_compile_options(tinyxml2_objs PRIVATE -Wno-useless-cast)
9+
target_compile_options(tinyxml2 PRIVATE -Wno-suggest-attribute=format)
10+
target_compile_options(tinyxml2 PRIVATE -Wno-useless-cast)
1311
endif()
1412
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
15-
target_compile_options_safe(tinyxml2_objs -Wno-implicit-fallthrough)
16-
target_compile_options_safe(tinyxml2_objs -Wno-suggest-destructor-override)
17-
target_compile_options_safe(tinyxml2_objs -Wno-zero-as-null-pointer-constant)
18-
target_compile_options_safe(tinyxml2_objs -Wno-format-nonliteral)
19-
target_compile_options_safe(tinyxml2_objs -Wno-inconsistent-missing-destructor-override)
13+
target_compile_options_safe(tinyxml2 -Wno-implicit-fallthrough)
14+
target_compile_options_safe(tinyxml2 -Wno-suggest-destructor-override)
15+
target_compile_options_safe(tinyxml2 -Wno-zero-as-null-pointer-constant)
16+
target_compile_options_safe(tinyxml2 -Wno-format-nonliteral)
17+
target_compile_options_safe(tinyxml2 -Wno-inconsistent-missing-destructor-override)
2018
endif()
2119
if(CYGWIN)
2220
target_compile_definitions(-D_LARGEFILE_SOURCE) # required for fseeko() and ftello()
2321
endif()
2422

23+
target_externals_include_directories(tinyxml2 PUBLIC .)
24+

frontend/CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
file(GLOB hdrs "*.h")
22
file(GLOB srcs "*.cpp")
33

4-
add_library(frontend_objs OBJECT ${hdrs} ${srcs})
5-
target_include_directories(frontend_objs PRIVATE ${PROJECT_SOURCE_DIR}/lib)
4+
add_library(frontend ${hdrs} ${srcs})
5+
target_include_directories(frontend PUBLIC .)
6+
target_link_libraries(frontend PRIVATE cppcheck-core)

gui/CMakeLists.txt

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,44 +20,26 @@ CheckOptions:
2020
list(APPEND cppcheck-gui-deps ${hdrs} ${uis_hdrs} ${resources} ${qms})
2121
add_custom_target(gui-build-deps SOURCES ${cppcheck-gui-deps})
2222

23-
list(APPEND cppcheck-gui_SOURCES ${srcs} $<TARGET_OBJECTS:frontend_objs>)
24-
if (NOT BUILD_CORE_DLL)
25-
list(APPEND cppcheck-gui_SOURCES $<TARGET_OBJECTS:cppcheck-core> $<TARGET_OBJECTS:simplecpp_objs>)
26-
if(USE_BUNDLED_TINYXML2)
27-
list(APPEND cppcheck-gui_SOURCES $<TARGET_OBJECTS:tinyxml2_objs>)
28-
endif()
29-
endif()
23+
list(APPEND cppcheck-gui_SOURCES ${srcs})
3024
if (WIN32)
3125
list(APPEND cppcheck-gui_SOURCES cppcheck-gui.rc)
3226
endif()
3327

3428
add_executable(cppcheck-gui ${cppcheck-gui-deps} ${cppcheck-gui_SOURCES})
29+
target_link_libraries(cppcheck-gui cppcheck-core simplecpp tinyxml2 picojson frontend)
30+
3531
set_target_properties(cppcheck-gui PROPERTIES AUTOMOC ON)
3632
set_target_properties(cppcheck-gui PROPERTIES WIN32_EXECUTABLE ON)
37-
target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/lib/ ${PROJECT_SOURCE_DIR}/frontend/)
38-
if(USE_BUNDLED_TINYXML2)
39-
target_externals_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/tinyxml2/)
40-
else()
41-
target_include_directories(cppcheck-gui SYSTEM PRIVATE ${tinyxml2_INCLUDE_DIRS})
42-
endif()
43-
target_include_directories(cppcheck-gui PRIVATE ${PROJECT_SOURCE_DIR}/externals/picojson/)
4433
if (NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
4534
target_precompile_headers(cppcheck-gui PRIVATE precompiled.h)
4635
endif()
4736
if (HAVE_RULES)
4837
target_link_libraries(cppcheck-gui ${PCRE_LIBRARY})
4938
endif()
50-
if(tinyxml2_FOUND AND NOT USE_BUNDLED_TINYXML2)
51-
target_link_libraries(cppcheck-gui ${tinyxml2_LIBRARIES})
52-
endif()
5339
target_link_libraries(cppcheck-gui ${QT_CORE_LIB} ${QT_GUI_LIB} ${QT_WIDGETS_LIB} ${QT_PRINTSUPPORT_LIB} ${QT_HELP_LIB} ${QT_NETWORK_LIB})
5440
if(WITH_QCHART)
5541
target_link_libraries(cppcheck-gui ${QT_CHARTS_LIB})
5642
endif()
57-
if (BUILD_CORE_DLL)
58-
target_compile_definitions(cppcheck-gui PRIVATE CPPCHECKLIB_IMPORT TINYXML2_IMPORT)
59-
target_link_libraries(cppcheck-gui cppcheck-core)
60-
endif()
6143
if(MSVC)
6244
# compilation will fail as e.g. QList::realloc would be replaced by MSVC's macro definition
6345
target_compile_definitions(cppcheck-gui PRIVATE $<$<CONFIG:Debug>:DISABLE_CRTDBG_MAP_ALLOC>)

gui/test/filelist/CMakeLists.txt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,10 @@ add_executable(test-filelist
55
${test-filelist_SRC}
66
testfilelist.cpp
77
${CMAKE_SOURCE_DIR}/gui/filelist.cpp
8-
${CMAKE_SOURCE_DIR}/lib/pathmatch.cpp
9-
${CMAKE_SOURCE_DIR}/lib/path.cpp
10-
${CMAKE_SOURCE_DIR}/lib/utils.cpp
11-
$<TARGET_OBJECTS:simplecpp_objs>
128
)
13-
target_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui ${CMAKE_SOURCE_DIR}/lib)
14-
target_externals_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/externals/simplecpp)
9+
target_include_directories(test-filelist PRIVATE ${CMAKE_SOURCE_DIR}/gui)
1510
target_compile_definitions(test-filelist PRIVATE SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}")
16-
target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB})
11+
target_link_libraries(test-filelist ${QT_CORE_LIB} ${QT_TEST_LIB} cppcheck-core simplecpp)
1712

1813
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
1914
if(QT_VERSION VERSION_GREATER_EQUAL "6.9.0")
@@ -26,4 +21,4 @@ if (REGISTER_GUI_TESTS)
2621
add_test(NAME test-filelist COMMAND $<TARGET_FILE:test-filelist>)
2722
endif()
2823

29-
add_dependencies(gui-tests test-filelist)
24+
add_dependencies(gui-tests test-filelist)

0 commit comments

Comments
 (0)