Hi,

On Mon, Oct 12, 2015 at 10:39 AM, René J. V. <rjvbertin@gmail.com> wrote:
Hello,

I'm using cmake in conjunction with a packaging/distribution system that aims to
control the compiler and linker flags, a priori via the usual environment
variables. (We're talking about MacPorts.)

Using one of the CMAKE_BUILD_TYPE presets, the value of those env. variables
appears at most to be added in front of the preset options, which means user
options can be overridden. That may be intended behaviour, but not ideal for my
use case.

Working with Debian and Ubuntu systems, I deduced that using a non-pre-defined
BUILD_TYPE make cmake use the values of CFLAGS, CXXFLAGS etc, through
CMAKE_C_FLAGS, CMAKE_CXX_FLAGS etc (instead of CMAKE_C*_FLAGS_RELEASE, for
instance).

Experimenting with -DCMAKE_BUILD_TYPE=MacPorts in the toplevel control file
(cmake PortGroup), that appeared indeed to work, but I appear to have been
mistaken. Adding -DCMAKE_C*_FLAGS_MACPORTS definitions has no effect, nor has
setting CMAKE_C*_FLAGS from the CMake command line.

Which leads me to the following questions:
- Is it indeed possible to get CMake to take all compiler and linker flags from
the environment, and if so, how?
- If not, what is the best/official way to get exact control over the compiler
and linker options used?

No this is not possible in general. A CMakeLists.txt file can always just set their own compiler/linker flags.

However if I understand you correctly (in what kind of flags you want to change), then this could be doable with a toolchain file. These are usually used to teach CMake specialities about compilers/linkers that it does not support itself and behave sufficiently different from one it does know. That is for example gcc builds for doing cross-compilation to some specialized hardware may not work with certain flags CMake uses by default for gcc builds.

The toolchain files are just cmake scripts, you can see some examples in the Modules/Platform directory of your cmake install. They set certain special variables that CMake will read out again when creating compiler/linker commandlines. The variables are explained in the documentation of CMake IIRC.
 
- Out of curiosity, what's special about the CMAKE_BUILD_TYPE=Debian build type?

There's no such build type in CMake, see the Compilers and Tools section here: https://cmake.org/Wiki/CMake_Useful_Variables#Various_Options that details the built-in types in CMake.

Andreas