[CMake] Compile same source file with different flags into the same library

Matthias Moeller matthias.moeller at math.tu-dortmund.de
Tue Dec 8 05:06:24 EST 2009


I try to write a cmake file for some external library (from the sparse
suite).
In the provided makefile a single source file is compiled twice with
different compiler flags, e.g.,

$(C) -DDINT -c ../Source/amd_aat.c -o amd_i_aat.o
$(C) -DDLONG -c ../Source/amd_aat.c -o amd_l_aat.o

and finally all object files are combined in a single library.


In my CMakeLists.txt I set the list of source files

SET(AMD_SRC
  ${AMD_SOURCE_DIR}/Source/amd_aat.c
  ...)

generate the names for the output files as follows

STRING(REGEX REPLACE "amd_" "amd_i_" AMDI_SRC ${AMD_SRC})
STRING(REGEX REPLACE "amd_" "amd_l_" AMDL_SRC ${AMD_SRC})

and specify the compiler flags accordingly

SET_SOURCE_FILES_PROPERTIES({AMDI_SRC} PROPERTIES COMPILE_FLAGS "-DDINT")
SET_SOURCE_FILES_PROPERTIES({AMDL_SRC} PROPERTIES COMPILE_FLAGS "-DDLONG")

However, the problem is that there are no physical source files named,
e.g. amd_i_aat.c, and hence, CMake produces the following obvious error
message:

CMake Error in CMakeLists.txt:
  Cannot find source file "amd_i_aat.c".  Tried extensions .c .C .c++
  .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx


Is is possible to tell CMake that the name of the source file differs
from that of the output file?


Best regards,
Matthias


More information about the CMake mailing list