[CMake]: CHECK_CXX_SOURCE_COMPILES?!

Enumerator

Mitglied Kamel
Hi!

Nachdem ich, dank deepthroat, voller Begeisterung angefangen habe, mich mit CMake auseinander zu setzen, bin ich eigentlich ganz gut klar gekommen.
Doch eine Kleinigkeit bereitet mir heftiges Kopfweh:
Code:
INCLUDE(CheckCXXSourceCompiles)

CHECK_CXX_SOURCE_COMPILES(
"   template<typename T> void foo(T);
    extern template void foo<int>(int);
"   HAVE_EXTERN_TEMPLATE
)

CONFIGURE_FILE(
    ${CMAKE_CURRENT_SOURCE_DIR}/build-config.hpp.in
    ${CMAKE_CURRENT_BINARY_DIR}/build-config.hpp
)
Aus irgendeinem Grund ist HAVE_EXTERN_TEMPLATE in der build-config.hpp nie definiert, alle anderen Tests funktionieren aber einwandfrei.
Dabei unterstützt mein Compiler (gcc) definitiv derartige Konstrukte und ich habe zuvor mit Autotools den selben Test erfolgreich durchgeführt...

Hat jemand eine Idee?


Gruß
Enum
 
Hi. :)

Wie sieht denn die build-config.hpp Datei aus? Ich nehme an, du hast eine Zeile
Code:
#cmakedefine HAVE_EXTERN_TEMPLATE
?

Steht denn evtl. der Wert von HAVE_EXTERN_TEMPLATE noch im Cache (CMakeCache.txt)? Wenn ja, wird der Test nicht nochmal ausgeführt.

Gruß
 
Tach!

Jepp, steht so drin. Und hab' mich auch nicht verschrieben. Und dank out-of-source build sowie Löschen des ganzen Ordners bin ich ziemlich sicher, dass es nicht am Cache liegt...
Dachte erst es liegt daran, dass CMake zuerst /usr/bin/c++ als Compiler findet. Auch wenn das bei mir über /etc/alternatives/c++ direkt auf /usr/bin/gcc zeigt, hätt' ja sein können dass er sich dann anders verhält. Aber Fehlanzeige, selbst wenn ich via "cmake -i" ausdrücklich gcc verlange rafft er es nicht.
Außerdem funktioniert wie gesagt ja jede andere #cmakedefine Regel.
Ich mein', ist kein Weltuntergang. Aber verdammt unschön.

Gruß
Enum
 
Zuletzt bearbeitet:
Mein Gott, wie banal!

Da hätte ich echt früher 'drauf kommen müssen:
Code:
CHECK_CXX_SOURCE_COMPILES(
"   template<typename T> void foo(T);
    extern template void foo<int>(int);
    int main(void) { return 0; }
"   HAVE_EXTERN_TEMPLATE
)
Man hätte ja eher mal vermuten können dass sich CMake ein wenig anders verhält als GNU Auto*.
Aber nein, klein Enum muss erst einen Bug im Modul CheckCXXSourceCompiles vermuten und sich den Quellcode ansehen.
Tja, viele Wege führen nach Rom.

Gruß
Enum
 
Zurück