[CMake] Enabling C99 in CMake

Michael Hertling mhertling at online.de
Thu Jun 23 11:50:23 EDT 2011


On 06/23/2011 05:09 AM, Todd Gamblin wrote:
> On Jun 22, 2011, at 3:46 PM, Michael Hertling wrote:
> 
>> Wouldn't a simple
>>
>> CC="gcc -std=c99" cmake <path/to/source>
>>
>> for the initial configuration be an appropriate solution?
> 
> I would say no, because whether or not the project is written in C99 or not isn't something the caller of cmake should have to know.  It's something the developers should know, and whoever is building the code shouldn't have to care.
> 
> -Todd

While I can understand your point, I'm of a different opinion: In the
end, it's the responsibility of the user to provide the project with a
suitable compiler. The fact that CMake usually finds one automatically
is very convenient, but not self-evident, so I'd take it as absolutely
normal to specify the compiler used to build the project. Compare the
following two cases:

(1) You want to use, say, /opt/gcc-4.7/bin/gcc for your project. Of
course, CMake doesn't find this compiler by itself, so you issue

CC=/opt/gcc-4.7/bin/gcc cmake <path/to/source>

for the project's initial configuration.

(2) You need to use a C99 compiler for your project, but CMake invokes
the C99-capable GCC without the -std=c99 switch, so you issue

CC="gcc -std=c99" cmake <path/to/source>

for the project's initial configuration.

Case (1) is widely accepted, and case (2) doesn't differ basically from
(1), IMO; in both cases, you specify a desired/needed compiler for your
project, or in other words: A specification of your project's compiler
is not limited to the latter's location in the file system, but might
also span very well compiler-specific switches like the -std=c99 one.
Of course, that's just my personal opinion, but in doing so, you do
not need to modify any CMake files or even the CMakeLists.txt files
of your project; all you need is to have a C99 compiler available.

However, you might possibly add a check to your project, e.g. using
TRY_COMPILE() or CheckCSourceCompiles(), with C99 source code a C89
compiler can't build, and if this check fails, you can notify the
user of the need to reconfigure and specify a C99 compiler. If a
project must use the GNU compiler, one would do quite the same.

Regards,

Michael


More information about the CMake mailing list