[CMake] Checking function or symbol in namespace
Michael Wild
themiwi at gmail.com
Thu Jan 21 04:14:14 EST 2010
On 21. Jan, 2010, at 9:56 , Marcel Loose wrote:
> On Thu, 2010-01-21 at 06:52 +0100, Michael Wild wrote:
>> On 21. Jan, 2010, at 24:55 , Mateusz Loskot wrote:
>>
>>> Hi,
>>>
>>> I'm trying to perform the following checks:
>>>
>>> check_function_exists(std::pow HAVE_POW)
>>>
>>> or
>>>
>>> check_symbol_exists(std::pow cmath HAVE_POW)
>>>
>>> but it looks that both macros have troubles
>>> with resolving std:: namespace.
>>>
>>> The documentation is not very clear about that.
>>>
>>> Or I should stick to try_compile based tests?
>>>
>>> Best regards,
>>>
>>
>>
>> AFAIK check_symbol_exists is used for preprocessor symbols.
> check_function_exists looks for C functions, not C++. Also notice, that
> older C++ standard libraries and non-compliant C++ compilers don't use
> the namespace std. You might want to have a look at
> CMakeBackwardCompatibilityCXX.cmake or the various other modules it
> uses.
>>
>>
>> HTH
>>
>> Michael
>>
> I thought that check_symbol_exists() was meant to check for the
> *declaration* of a symbol (e.g. a function) in a header file; and that
> check_function_exists() was meant to check for the *definition* of a
> function (i.e. exists as symbol in a library).
>
> Best regards,
> Marcel Loose.
Just checked: check_symbol_exists works for both. E.g. testing for deflateInit in zlib.h (which is a #define) results in the following test code:
#include <zlib.h>
void cmakeRequireSymbol(int dummy,...){(void)dummy;}
int main()
{
#ifndef deflateInit
cmakeRequireSymbol(0,&deflateInit);
#endif
return 0;
}
As you can see, the code will compile successfully for both cases.
IMHO the documentation should be clarified...
Michael
More information about the CMake
mailing list