Заставить мой скрипт 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