updates to cmake

This commit is contained in:
2026-04-23 12:23:52 -06:00
parent af03e25979
commit 310b25ce1f
2 changed files with 44 additions and 27 deletions

View File

@@ -1,39 +1,48 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
project(calculator VERSION 1.0 LANGUAGES C) project(arraylist VERSION 1.0 LANGUAGES C)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD_REQUIRED ON)
# Export compile_commands.json (para clangd) # clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_compile_options( # Opciones
option(ARRAYLIST_BUILD_TESTS "Build arraylist tests" OFF)
option(ARRAYLIST_ENABLE_SANITIZERS "Enable sanitizers for tests" ON)
# ------------------------
# Library
# ------------------------
add_library(arraylist
src/arraylist.c
)
target_include_directories(arraylist
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_compile_options(arraylist PRIVATE
-Wall -Wall
-Wextra -Wextra
-Wpedantic -Wpedantic
) )
# ------------------------
# Example (opcional)
# ------------------------
add_executable(arraylist_example src/main.c)
include_directories(include) target_link_libraries(arraylist_example
arraylist
add_library(arraylist_lib
src/arraylist.c
) )
add_executable(arraylist_main src/main.c)
target_link_libraries(arraylist_main arraylist_lib)
function(enable_sanitizers target)
target_compile_options(${target} PRIVATE -fsanitize=address -fno-omit-frame-pointer)
target_link_options(${target} PRIVATE -fsanitize=address)
endfunction()
# ------------------------ # ------------------------
# Testing # Testing
# ------------------------ # ------------------------
if(ARRAYLIST_BUILD_TESTS)
enable_testing() enable_testing()
add_subdirectory(test) add_subdirectory(test)
endif()

View File

@@ -3,13 +3,21 @@ find_package(cmocka REQUIRED)
add_executable(test_arraylist test_arraylist.c) add_executable(test_arraylist test_arraylist.c)
target_link_libraries(test_arraylist target_link_libraries(test_arraylist
arraylist_lib arraylist
cmocka::cmocka cmocka::cmocka
) )
enable_sanitizers(test_arraylist) # Sanitizers (portables)
if(ARRAYLIST_ENABLE_SANITIZERS)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(test_arraylist PRIVATE
-fsanitize=address
-fno-omit-frame-pointer
)
target_link_options(test_arraylist PRIVATE
-fsanitize=address
)
endif()
endif()
target_compile_options(test_arraylist PRIVATE -fsanitize=address -fno-omit-frame-pointer) add_test(NAME arraylist_tests COMMAND test_arraylist)
target_link_options(test_arraylist PRIVATE -fsanitize=address)
add_test(NAME arraylist_tests COMMAND arraylists_arena)