[CMake] Troulbes with INSTALL_PREFIX

smiley memory_leak at fastmail.fm
Sat Jun 4 13:48:53 EDT 2016


Hello guys,

I have some troubles with CMakes handling of INSTALL_PREFIX. I am not
sure if it is CMake or just me being a goof, so I hope somebody more
knowledgable can guide me.

As a background, I have a project (or rather a list of procets) I wish
to do automated compile on. I have set of batch files to load stuff from
git, configure, build and finally install everything. I keep two things
separate in two separate trees defined by architecture and build.
Nothing too fancy, just standard jazz, one tree for x66 and another for
x64 and each tree has build and release branch.

It works more or less as I wanted it, but one minor annoyance. When
CMake does the final install, it seems to use the path from cache file
and ignores that I am giving it another install path on the comand line.
I have tried to delete CMakeCache.txt before doing build but it didn't
help. The only way to get CMake to reflect difference in installation
paths is to wipe entire build directory and to reconfigure everything
from scratch for every build. That effectively doubles the time for
build! CMake correctly builds different configurations but it seems to
don't care for possible difference in installation. 

How it works is that, it always uses path from the first build. Thus if
I build release build first it installs all binaries into "release"
path, even for debug build, despite that it gets correct path on the
command line. And contrary if I build debug build first it will install
even binaries from release build into debug path. 

I can't post all batch files involved, there are several, configuration,
driver helper, but some relevant points:

Here is how INSTALL_PREFIX is constructed:

 (...)
Set INSTALL_PREFIX=%INSTALL_BASE%\%BUILD_PLATFORM%\%BUILD_CONFIG%
if not exist "%INSTALL_PREFIX%" mkdir "%INSTALL_PREFIX%"
Set CMAKE_OPT=%CMAKE_OPT% -DCMAKE_INSTALL_PREFIX=%INSTALL_PREFIX%
(...)

All variables are correctly passed, and it builds everything fine but it
refuses to reflect change in installation prefix in different builds. I
just wonder if it is me goofing somewhere, or is it the way CMakes
operates? Can I change this behaviour anyhow without need to parse
CMakeCache.txt manually or as I do now as a quick fix, reconfiguring
entire project from scratch for every configuration? 

As a curiosa, here is a small part of a driver file that actually invoke
cmake, don't worry about other script it's just for configuration, so
you get an idea of what I'm doing (vs2015 automated build):

:dobuild
  if exist %BUILD_DIR% rd /S /q %BUILD_DIR%
  call %~dp0\cmake-setvars.bat
  
  cd "%BUILD_DIR%"
  set PATH=%INSTALL_PREFIX%\bin;%PATH%;
  cmake %CMAKE_OPT% ..
  MSBuild ALL_BUILD.vcxproj
  /p:Configuration=%BUILD_CONFIG%,Platform=%BUILD_PLATFORM%,PlatformToolset=v140
  MSBuild INSTALL.vcxproj
  /p:Configuration=%BUILD_CONFIG%,Platform=%BUILD_PLATFORM%
  cd ..
goto:eof

All help is appreciated.

-- 
http://www.fastmail.com - A no graphics, no pop-ups email service



More information about the CMake mailing list