Заставить мой скрипт FindLibDL CMake не сообщать о сбое для ложного логического значения

Я использую модуль FindLibDL CMake, который, помимо прочего, определяет некоторое логическое значение в отношении подчеркивания:

# ...
CHECK_C_SOURCE_RUNS("#include <dlfcn.h>
#include <stdlib.h>
void testfunc() {}
int main() {
  testfunc();
  if (dlsym(0, \"_testfunc\") != (void*)0) {
    return EXIT_SUCCESS;
  } else {
    return EXIT_FAILURE;
  }
}" LIBDL_NEEDS_UNDERSCORE)

mark_as_advanced(LIBDL_INCLUDE_DIRS LIBDL_LIBRARIES LIBDL_NEEDS_UNDERSCORE)

Дело в том, что если подчеркивания не нужны, CMake сообщает о сбое для LIBDL_NEEDS_UNDERSCORE, Как я могу сделать так, чтобы я все еще определял то же значение и все еще не сообщался как Отказ?

1 ответ

Как указывает @arrowd, макрос CHECK_C_SOURCE_RUNS работает именно так: если скомпилированная программа возвращает 0, она сообщает об успехе, в противном случае она сообщает о сбое.

Если вам нужен другой вывод, вы можете использовать команду try_run напрямую.


Например, с try_run Вы можете достичь этого поведения:

  • если необходимо подчеркнуть, вывод

    Check whether 'dl' requires underscore - Yes
    
  • если подчеркивание не требуется, вывод

    Check whether 'dl' requires underscore - No
    
  • если во время проверки возникает ошибка, вывод

    Check whether 'dl' requires underscore - Failed
    
Другие вопросы по тегам