teddybouch
teddybouch

Reputation: 125

CMake INSTALL and RENAME cannot find file

I'm trying to make and install a config.cmake file for the project that I'm building, and the install part isn't working because apparently it can't find the file. I was originally using the INSTALL command from cmake, and when that didn't work I tried file( RENAME ... ) because I have a little more experience with it - neither seem to work. I've verified that the file is being made in the correct location and with the expected filename.

This is the relevant part of the CMakeLists.txt:

################################################################################
# Build the config.cmake file for finding project information
################################################################################
file(WRITE ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake "set(${PROJECT_NAME}_PROTO_DIR ${PROTO_MAIN_DIR})\n")
file(APPEND ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake "set(${PROJECT_NAME}_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/;${PROTO_GEN_DIR})\n")
file(APPEND ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake "set(${PROJECT_NAME}_LIBRARY_DIR ${CMAKE_CURRENT_LIST_DIR}/lib/)\n")
file(APPEND ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake "set(${PROJECT_NAME}_LIBRARIES ${PROJECT_LIBRARIES})\n")

message( "CMAKE_BINARY_DIR: " ${CMAKE_BINARY_DIR} )
message( "PROJECT_NAME: " ${PROJECT_NAME} )

#INSTALL(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake DESTINATION ~/CMake/Modules/)
file(RENAME ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake ~/CMake/Modules/${PROJECT_NAME}Config.cmake)

Here's the relevant output when I try to rune cmake:

CMAKE_BINARY_DIR: /home/ava/workspace/frontseat_drivers/build
PROJECT_NAME: frontseat
CMake Error at src/frontseat/CMakeLists.txt:47 (file):
  file RENAME failed to rename

    /home/ava/workspace/frontseat_drivers/build/frontseatConfig.cmake

  to

    ~/CMake/Modules/frontseatConfig.cmake

  because: No such file or directory

and here's output confirming that the file is where I expect with the name that I expect:

ava@3b97b310abf0:~/workspace/frontseat_drivers/build$ ls -l
total 32
-rw-rw-r--. 1 ava ava 12219 Jun 13 19:04 CMakeCache.txt
drwxrwxr-x. 5 ava ava  4096 Jun 13 18:48 CMakeFiles
-rw-rw-r--. 1 ava ava  2250 Jun 13 15:41 cmake_install.cmake
-rw-rw-r--. 1 ava ava   315 Jun 14 12:30 frontseatConfig.cmake
-rw-rw-r--. 1 ava ava  6397 Jun 13 18:48 Makefile
drwxrwxr-x. 5 ava ava    98 Jun 13 18:48 src

What would cause CMake not to be able to see the file?

Upvotes: 1

Views: 2999

Answers (1)

Tsyvarev
Tsyvarev

Reputation: 66308

The error is probably about destination file ~/CMake/Modules/frontseatConfig.cmake. It is because CMake doesn't interpret ~ part, so it cannot resolve the path correctly.

Instead of ~ use $ENV{HOME} for point to the user's home directory.

Upvotes: 2

Related Questions