alecthomas / entityx

EntityX - A fast, type-safe C++ Entity-Component system
MIT License
2.21k stars 295 forks source link

Catch::AssertionInfo& Issues Preventing Build #240

Closed jasonmeverett closed 3 years ago

jasonmeverett commented 3 years ago

Using the CMAKE system, I have the following as my CMakeLists.txt file:

cmake_minimum_required(VERSION 3.10)
project(Modeller VERSION 0.1)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

add_subdirectory(entityx)
add_executable(Modeller src/testing.cpp)
target_link_libraries(Modeller entityx)

I also have the entire entityx/ directory at the root of my project.

This is src/testing.cpp:

#include "entityx/entityx.h"

int main()
{
    entityx::EntityX ex;

    return 0;
}

Error output is as follows:

[main] Building folder: Modeller 
[build] Starting build
[proc] Executing command: /usr/bin/cmake --build /home/jmeveret/Modeller/build --config Debug --target all -- -j 14
[build] Scanning dependencies of target entityx
[build] [  4%] Building CXX object entityx/CMakeFiles/entityx.dir/entityx/Event.cc.o
[build] [ 13%] Building CXX object entityx/CMakeFiles/entityx.dir/entityx/help/Timer.cc.o
[build] [ 13%] Building CXX object entityx/CMakeFiles/entityx.dir/entityx/help/Pool.cc.o
[build] [ 18%] Building CXX object entityx/CMakeFiles/entityx.dir/entityx/System.cc.o
[build] [ 22%] Building CXX object entityx/CMakeFiles/entityx.dir/entityx/Entity.cc.o
[build] [ 27%] Linking CXX shared library libentityx-d.so
[build] [ 27%] Built target entityx
[build] Scanning dependencies of target Modeller
[build] Scanning dependencies of target pool_test
[build] Scanning dependencies of target event_test
[build] Scanning dependencies of target system_test
[build] Scanning dependencies of target tags_component_test
[build] Scanning dependencies of target entity_test
[build] Scanning dependencies of target benchmarks_test
[build] Scanning dependencies of target dependencies_test
[build] [ 31%] Linking CXX executable Modeller
[build] [ 36%] Building CXX object entityx/CMakeFiles/system_test.dir/entityx/System_test.cc.o
[build] [ 40%] Building CXX object entityx/CMakeFiles/pool_test.dir/entityx/help/Pool_test.cc.o
[build] [ 45%] Building CXX object entityx/CMakeFiles/tags_component_test.dir/entityx/tags/TagsComponent_test.cc.o
[build] [ 50%] Building CXX object entityx/CMakeFiles/benchmarks_test.dir/entityx/Benchmarks_test.cc.o
[build] [ 54%] Building CXX object entityx/CMakeFiles/entity_test.dir/entityx/Entity_test.cc.o
[build] [ 59%] Building CXX object entityx/CMakeFiles/event_test.dir/entityx/Event_test.cc.o
[build] [ 63%] Building CXX object entityx/CMakeFiles/dependencies_test.dir/entityx/deps/Dependencies_test.cc.o
[build] [ 68%] Built target Modeller
[build] In file included from /home/jmeveret/Modeller/entityx/entityx/Entity_test.cc:20:
[build] /home/jmeveret/Modeller/entityx/entityx/3rdparty/catch.hpp: In member function ‘Catch::AssertionInfo& Catch::AssertionInfo::operator=(const Catch::AssertionInfo&)’:
[build] /home/jmeveret/Modeller/entityx/entityx/3rdparty/catch.hpp:943:12: error: implicitly-declared ‘Catch::SourceLineInfo& Catch::SourceLineInfo::operator=(const Catch::SourceLineInfo&)’ is deprecated [-Werror=deprecated-copy]
[build]   943 |     struct AssertionInfo
[build]       |            ^~~~~~~~~~~~~

The errors continue on but all take the same form as the error seen in the last lines above.

What is going on here? It does look like the target is being built, but then not being linked properly? Any help is appreciated.

jasonmeverett commented 3 years ago

This is solved. Solution is CMAKE file below:

add_subdirectory(entityx)
find_library(entityx REQUIRED HINTS build/entityx)
add_subdirectory(pybind11)
pybind11_add_module(Modeller 
    src/world.cpp
    src/CMD.cpp
    src/sim.cpp
    src/output.cpp
    src/pyinterface.cpp
    src/integrator.cpp
    src/Modeller.cpp
    src/example1.cpp
    )
set_target_properties(entityx PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_link_libraries(Modeller PRIVATE entityx)

target_include_directories(Modeller PUBLIC
    "${PROJECT_SOURCE_DIR}/eigen"
    "${PROJECT_SOURCE_DIR}/entityx"
    "${PROJECT_SOURCE_DIR}/pybind11/include"
    "${PROJECT_SOURCE_DIR}/include"
    )