cmake try_compile:使用configure中的库

时间:2014-09-08 14:40:05

标签: cmake

我正在用cmake构建一个项目。该项目使用外部库plplot;我已将cmake配置为库和标头,并将其缓存在变量${PLPLOT_LIBRARY}, ${PLPLOT_LIB_PATH} and ${PLPLOT_INCLUDE_PATH}中。在plplot库中,一个函数已更改名称:plwid -> plwidth,我想检测它。我写了一个小try_compile()测试:

try_compile(HAVE_PLWID ${CMAKE_BINARY_DIR} cmake/tests/test_plwid.c)

但是,此测试将始终失败,因为我必须将标头和库信息传递给try_compile进程。像这样手动调用gcc

gcc -I${PLPLOT_INCLUDE_PATH} cmake/tests/test_plwid.c -L${PLPLOT_LIB_PATH} -l${PLPLOT_LIBRARY}

的工作原理。但是我不明白如何将必要的标志传递给try_compile命令:我试过了:

 try_compile(HAVE_PLWID ${CMAKE_BINARY_DIR} cmake/tests/test_plwid.c
             INCLUDE_DIRECTORIES ${PLPLOT_INCLUDE_PATH}
             LINK_DIRECTORIES ${PLPLOT_LIB_PATH}
             LINK_LIBRARIES ${PLPLOT_LIBRARY})

然后我得到cmake配置错误:

Attempt at a recursive or nested TRY_COMPILE in directory

    /path/to/build

我非常确信${PLPLOT_XXX}变量是正确的,至少其余的构建工作正常基于这些变量。

更新:如果我使用cmake命令调用--debug_trycompile并转到build/CMakeFiles/CMakeTmp目录并手动调用cmake:< / p>

cmake . -DINCLUDE_DIRECTORIES=/path/plplot/include -DLINK_DIRECTORIES=/path/to/plplot/lib -DLINK_LIBRARIES=plplotd

测试程序将正确构建和链接;所以似乎挑战是将这些选项正确地传递给try_compile() cmake命令调用?

1 个答案:

答案 0 :(得分:4)

LINK_DIRECTORIESINCLUDE_DIRECTORIES无法作为try_compile的选项传递,但必须以CMAKE_FLAGS选项作为额外标记传递,方法如下:

try_compile(HAVE_PLWID "${CMAKE_BINARY_DIR}/temp" "${CMAKE_SOURCE_DIR}/tests/test_plwid.c"
             LINK_LIBRARIES ${PLPLOT_LIBRARY}
             CMAKE_FLAGS 
                  "-DINCLUDE_DIRECTORIES=${PLPLOT_INCLUDE_PATH}"
                  "-DLINK_DIRECTORIES=${PLPLOT_LIB_PATH}")