Skip to content

Commit

Permalink
Fixed gtest strange behaviour by setting output dirs for ARCHIVE
Browse files Browse the repository at this point in the history
  • Loading branch information
bialger committed Aug 1, 2024
1 parent 34f542e commit b798a03
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 50 deletions.
18 changes: 9 additions & 9 deletions .github/workflows/ci_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ jobs:
build_type: "Release", cc: "cl", cxx: "cl",
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
}
# - {
# name: "Windows Latest MinGW", artifact: "Windows-MinGW.tar.xz",
# os: windows-latest,
# build_type: "Release", cc: "gcc", cxx: "g++"
# } # some fatal errors using MinGw; MSVC - ok
- {
name: "Windows Latest MinGW", artifact: "Windows-MinGW.tar.xz",
os: windows-latest,
build_type: "Release", cc: "gcc", cxx: "g++"
}
- {
name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz",
os: ubuntu-latest,
Expand Down Expand Up @@ -58,11 +58,11 @@ jobs:
shell: bash
run: |
if [ "${{ matrix.config.cxx }}" == "g++" ]; then
cmake -S . -B cmake-build-release -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_COMPILER=${{ matrix.config.cc }} -DCMAKE_BUILD_TYPE=Release -DGTEST_RELATIVE_DIR=lib -DTERMINAL_EMULATOR=bash -G "Unix Makefiles"
cmake -S . -B cmake-build-debug -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_COMPILER=${{ matrix.config.cc }} -DCMAKE_BUILD_TYPE=Debug -DGTEST_RELATIVE_DIR=lib -DTERMINAL_EMULATOR=bash -G "Unix Makefiles"
cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Releaseh -G "Unix Makefiles"
cmake -S . -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles"
else
cmake -S . -B cmake-build-release -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_COMPILER=${{ matrix.config.cc }} -DCMAKE_BUILD_TYPE=Release -DGTEST_RELATIVE_DIR=lib -DTERMINAL_EMULATOR=bash
cmake -S . -B cmake-build-debug -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_COMPILER=${{ matrix.config.cc }} -DCMAKE_BUILD_TYPE=Debug -DGTEST_RELATIVE_DIR=lib -DTERMINAL_EMULATOR=bash
cmake -S . -B cmake-build-release -DCMAKE_BUILD_TYPE=Release
cmake -S . -B cmake-build-debug -DCMAKE_BUILD_TYPE=Debug
fi
- name: Build main target
Expand Down
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ set(CMAKE_CXX_STANDARD 20)
if(WIN32) # Install dlls in the same directory as the executable on Windows
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
Expand Down
41 changes: 0 additions & 41 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,47 +29,6 @@ target_link_libraries(
GTest::gtest_main
)

set(MSVC_LIBRARY_EXTENSION lib)
set(MINGW_LIBRARY_EXTENSION a)
set(GTEST_DIR "${CMAKE_BINARY_DIR}/${GTEST_RELATIVE_DIR}")

if (NOT GTEST_RELATIVE_DIR)
set(MSVC_LIBRARY_EXTENSION dll)
set(MINGW_LIBRARY_EXTENSION dll)
set(GTEST_DIR "${CMAKE_BINARY_DIR}/bin")
endif ()

# For Windows: prevents error with gtest.dll not found
if(WIN32)
# If terminal emulator is not declared, then it is cmd.exe
if (NOT TERMINAL_EMULATOR)
set(TERMINAL_EMULATOR cmd)
endif ()

set(WIN_DIR_SEPARATOR "/")
set(WIN_COPY_COMMAND cp)

if (TERMINAL_EMULATOR STREQUAL "cmd")
set(WIN_DIR_SEPARATOR "\\")
set(WIN_COPY_COMMAND copy)
endif ()

string(REPLACE "/" ${WIN_DIR_SEPARATOR} WIN_CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR})
string(REPLACE "/" ${WIN_DIR_SEPARATOR} WIN_GTEST_DIR ${GTEST_DIR})
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
add_custom_command(TARGET ${PROJECT_NAME}_tests POST_BUILD
COMMAND ${WIN_COPY_COMMAND} ARGS "${WIN_GTEST_DIR}${WIN_DIR_SEPARATOR}Debug${WIN_DIR_SEPARATOR}gtest.${MSVC_LIBRARY_EXTENSION}" "${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}Debug${WIN_DIR_SEPARATOR}gtest.${MSVC_LIBRARY_EXTENSION}"
COMMAND ${WIN_COPY_COMMAND} ARGS "${WIN_GTEST_DIR}${WIN_DIR_SEPARATOR}Debug${WIN_DIR_SEPARATOR}gtest_main.${MSVC_LIBRARY_EXTENSION}" "${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}Debug${WIN_DIR_SEPARATOR}gtest_main.${MSVC_LIBRARY_EXTENSION}"
COMMENT "Copying to output directory: ${WIN_COPY_COMMAND} ${WIN_GTEST_DIR}${WIN_DIR_SEPARATOR}Debug${WIN_DIR_SEPARATOR}gtest.${MSVC_LIBRARY_EXTENSION} ${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}Debug${WIN_DIR_SEPARATOR}gtest.${MSVC_LIBRARY_EXTENSION}")
else ()
add_custom_command(TARGET ${PROJECT_NAME}_tests POST_BUILD
COMMAND ${WIN_COPY_COMMAND} ARGS "${WIN_GTEST_DIR}${WIN_DIR_SEPARATOR}libgtest.${MINGW_LIBRARY_EXTENSION}" "${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}libgtest.${MINGW_LIBRARY_EXTENSION}"
COMMAND ${WIN_COPY_COMMAND} ARGS "${WIN_GTEST_DIR}${WIN_DIR_SEPARATOR}libgtest_main.${MINGW_LIBRARY_EXTENSION}" "${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}libgtest_main.${MINGW_LIBRARY_EXTENSION}"
COMMAND ${WIN_COPY_COMMAND} ARGS "${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}${PROJECT_NAME}_tests.exe" "${WIN_CMAKE_BINARY_DIR}${WIN_DIR_SEPARATOR}${PROJECT_NAME}_tests_.exe"
COMMENT "Copying to output directory")
endif()
endif()

if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug) # Tests should be built with Debug
endif()
Expand Down

0 comments on commit b798a03

Please sign in to comment.