cmake install(FILES ...) nem működik

Fórumok

Sziasztok,

Lenne egy c++ projectem amit cmakekel buildelnék, benne több alproject.
Ebből az egyik egy lib, amit más alprojectek használnak.

A lib létrehozásához az add_library és az INSTALL(TARGETS ...)-t kell használnom, ott ahol pedig szükségem van a lib re a
link_directories(${PROJECT_BINARY_DIR}/lib) és
target_link_libraries(...) -t.

Ezzel nincs is probléma, a .so file létrejön a megadott helyen, de szükségem lenne arra, hogy a .hh fájlok is látszódjanak, azonban az install(FILES ...) mintha nem csinálna semmit.
Ennek szemléltetésére létrehoztam egy új projectet QtCreatorban:

& ls test
CMakeLists.txt empty.hh main.cpp

$ cat test/CMakeLists.txt
project(test)
cmake_minimum_required(VERSION 2.8)
install(FILES empty.hh DESTINATION include)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

$ cat test/main.cpp
#include

using namespace std;

int main()
{
cout << "Hello World!" << endl;
return 0;
}

$ cat test/empty.hh
#ifndef EMPTY_HH
#define EMPTY_HH

#endif // EMPTY_HH

Ha a fájlok a "test" könyvtárban vannak, akkor a qtcreator alapértelmezetten a "test-build"-be fordít.
$ ls test-build/
CMakeCache.txt CMakeFiles Makefile cmake_install.cmake test test.cbp
$ ./test-build/test
Hello World!

Mint látható az empty.hh nincs a test-build/include alatt.
Google szerint így kéne használni az install(FILES...)-t, de nekem nem megy, lehet valamit félrenézek.
Ötleteket előre is köszi.

ui.:
$ cmake --help
cmake version 2.8.12

Hozzászólások

A fenti peldaban nem a build konyvtar van megadva, mint cel, hanem a rendszered alapertelmezett include konyvtara, pl. /usr/local/include. Ha a build konyvtarba akarod pakolni az empty.hh-t, akkor azt kozolnod is kell, pl. igy:

install(FILES empty.hh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})

Köszönöm válaszod,
sajnos ez így sem jó.

Letöröltem a build könyvtárat, átírtam a a CMakeList.txt, most így néz ki:
project(test)
cmake_minimum_required(VERSION 2.8)
install(FILES empty.hh DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})

Ezután újra futtatva a cmake-et az alábbi fájlokat kapom:

$ ls test-build/
CMakeCache.txt CMakeFiles Makefile cmake_install.cmake test test.cbp

Próbáltam a cmake-et nem csak az IDEből, hanem a konzolból is meghívni, az eredmény ua.

Kipróbáltam a test projecten és működik, köszönöm!

Viszont azt nem értem, hogy az eredeti példában az INSTALL(TARGETS ...) a megfelelő helyre hozza létre a .so-t a sima make parancs install nélkül.
Azt szeretném - ha lehet ilyet -, hogy a fő projectnél létrehozom a makefileokat a cmake paranccsal, majd a make-el fordítok. Jelenleg így csak a .so jön létre, de a headerek nem másolódnak a megfelelő helyre, azaz a következő alprojectnél fordítási hiba lesz, mert nem találja a .hh-t.
Ezt úgy tudnám megoldani, hogy a lib alprojectnél make majd make install, aztán a többi alprojectnél már mehet a make.
De ezt egy lépésben nem lehet megoldani?