siva
siva

Reputation: 1523

Cmake issue: 'FreeImage.h' file not found

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

Answers (1)

MatzZze
MatzZze

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

Related Questions