Reputation: 1523
Error message: 'FreeImage.h' file not found
CmakeList (I'm on MAC):
cmake_minimum_required(VERSION 3.10)
set(PROJECT_NAME KinectFusion)
project(${PROJECT_NAME})
set (CMAKE_CXX_STANDARD 14)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
add_definitions(-DPROJECT_DIR="${PROJECT_SOURCE_DIR}")
set(EXECUTABLE_OUTPUT_PATH bin)
set(LIBRARY_OUTPUT_PATH lib)
# for some reason clang doesn't include them in Wall whereas gcc does, so include them explicitly.
SET(EXTRA_WARNING_FLAGS "-Wsign-compare")
SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") # -march=native")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG -ftree-vectorize")
SET(CMAKE_CXX_FLAGS " -ftemplate-backtrace-limit=0 -Wall ${EXTRA_WARNING_FLAGS} ${CMAKE_CXX_FLAGS}")
find_package(FreeImage REQUIRED)
#find_package(realsense2 REQUIRED)
#include_directories(${realsense2_INCLUDE_DIRS})
#adds gitsubmodules
add_subdirectory(extern)
### if CMAKE Build Time
#adds our KinectFusion Lib
add_subdirectory(FusionLib)
#<-------Stuff for directly building an Application----->
set(APP_ONE ${PROJECT_NAME} )
add_executable(${APP_ONE} main.cpp)
#target_link_libraries
target_link_libraries (${APP_ONE} kfusion eigen ${FREEIMAGE_LIBRARIES} realsense2)
target_compile_features(${APP_ONE} PUBLIC cxx_std_17 )
target_compile_definitions(${APP_ONE} PRIVATE PROJECT_DATA_DIR="${CMAKE_SOURCE_DIR}/data")
### Copy Data to cmake-build, this need to be applied to each new executable###
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${CMAKE_SOURCE_DIR}/data $<TARGET_FILE_DIR:${PROJECT_NAME}>/data)
I can't figure out why FreeImage.h' can't be found. I have tried to use find_package
but this leads to the same error. Do you have any hints? I am also confused by the difference between target_include_directories and target_link_libraries.
EDIT: console output with find_packge (FreeImage RQUIRED)
rm -r build && mkdir build && cd build && cmake .. && make
-- The C compiler identification is AppleClang 11.0.3.11030032
-- The CXX compiler identification is AppleClang 11.0.3.11030032
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found FreeImage
-- Includes : /usr/local/include
-- Libraries : /usr/local/lib/libfreeimage.dylib
-- Submodule update
-- Configuring done
-- Generating done
-- Build files have been written to: BLABLA/KinectFusion/build
Scanning dependencies of target kfusion
[ 8%] Building CXX object FusionLib/CMakeFiles/kfusion.dir/src/icp.cpp.o
[ 16%] Building CXX object FusionLib/CMakeFiles/kfusion.dir/src/VirtualSensor.cpp.o
In file included from BLABLA/FusionLib/src/VirtualSensor.cpp:1:
In file included from ***/FusionLib/include/VirtualSensor.h:9:
BLABLA /FusionLib/include/FreeImageHelper.hpp:9:10: fatal error: 'FreeImage.h' file not found
#include <FreeImage.h>
^~~~~~~~~~~~~
1 error generated.
make[2]: *** [FusionLib/CMakeFiles/kfusion.dir/src/VirtualSensor.cpp.o] Error 1
make[1]: *** [FusionLib/CMakeFiles/kfusion.dir/all] Error 2
make: *** [all] Error 2
Upvotes: 0
Views: 2483
Reputation: 401
After find_package(FreeImage REQUIRED)
insert
include_directories(${FREEIMAGE_INCLUDE_DIRS})
or
include_directories(${FreeImage_INCLUDE_DIR})
(depending on which FindFreeImage.cmake
module you're using)
and it should work. Alternatively use include_directories(/usr/local/include)
find_package(<pkg-name> REQUIRED)
just ensures that this package is installed on your system. It does not automatically modifiy your build. The Freeimage package is installed on your system but "/usr/local/include" is not in your header search path. To add a directory to your header search path you use the cmake command include_directories()
.
See the cmake documentation here: https://cmake.org/cmake/help/latest/command/include_directories.html
Upvotes: 1