I am learning to build a library using CMake. The code structure for building library is like below:
include: Test.hpp ITest.hpp // interface src: Test.cpp ITest.cpp In CMakeLists.txt, the sentences I used to build library is :
file(GLOB SRC_LIST "src/iTest.cpp" "src/Test.cpp" "include/Test.hpp" "include/iTest.hpp" "include/deadreckoning.hpp") add_library(test SHARED ${SRC_LIST}) target_link_libraries( test ${OpenCV_LIBS}) // link opencv libs to libtest.so Then I wrote another test file (main.cpp), copy and paste the library under the same directory, link library and call functions inside the library. This CMakeLists.txt is
cmake_minimum_required(VERSION 2.8) project(myapp) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -O3 -Wall -ftree-vectorize -ffast-math -funroll-loops") add_executable(myapp main.cpp) target_link_libraries(myapp "/home/labUser/test_lib/libtest.so") The main.cpp compiles and runs succussfully if I don't include the header files inside the library:
#include <iostream> using namespace std; int main(){ cout << "hello world" << endl; return -1; } But when I include the header file #include "ITest.hpp", it has error:
fatal error: iTest.hpp: No such file or directory #include "iTest.hpp" compilation terminated. I don't understand why it happens. I think I have already linked the library successfully because when I run main.cpp without including header file, it doesn't give any "linking" error. And I think apparently the header files are inside the library. Why I can't include it? Can anyone help me figure this out?