如何配置外部cmake库?

时间:2014-12-17 15:13:20

标签: cmake

我想做的是致电

add_subdirectory(ext/oglplus)

并完成它。不幸的是,事情并非那么简单。有一个巨大的buildcript,可以检测各种opengl设置。所以我尝试了以下

ExternalProject_Add(liboglplus
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ext/oglplus
    CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/ext/oglplus/configure.py --use-glew
    BUILD_COMMAND  ${MAKE})

我遇到的问题并不是真的想要像那样构建它。它也没有正确构建,因为由于某种原因它想要安装库,因为没有安装目标,它将中止编译。

但构建脚本正在调用cmake。

所以我想要的是告诉cmake使用“cofigure.py”而不是“cmake ..”然后像任何其他cmake库一样使用它。

这可能吗?

1 个答案:

答案 0 :(得分:1)

我曾经使用CMake从Linux Kernel KBuild调用 ADD_CUSTOM_COMMAND()ADD_CUSTOM_TARGET() 这样,您可以运行任意命令(如config.py)并使用输出。

首先使用所有命令行选项设置命令作为CMake变量,在这种情况下,这将调用config.py脚本${CMAKE_CURRENT_SOURCE_DIR}/ext/oglplus/。 而不是在命令中对路径的路径进行编码(添加ext/oglplus),我认为将WORKING_DIRECTORY添加到自定义命令可能更好: add_custom_command

SET(KBUILD_CMD ${CMAKE_MAKE_PROGRAM}
-C ${KERNEL_BUILD_DIR}
CROSS_COMPILE=${CROSS_COMPILE} ARCH=${ARCH}
EXTRA_CFLAGS=${KBUILD_EXTRA_CFLAGS}
INSTALL_MOD_PATH=${INSTALL_MOD_PATH}
M=${CMAKE_CURRENT_SOURCE_DIR}
KBUILD_EXTRA_SYMBOLS=${depends_module_ksyms}
)

添加一个调用构建脚本的自定义命令,并在CMAKE_CURRENT_BINARY_DIRECTORY中创建一个文件(注意第二个COMMAND以触摸文件)

ADD_CUSTOM_COMMAND(
OUTPUT  ${module_name}.built
COMMAND ${KBUILD_CMD} modules
COMMAND cmake -E touch ${module_name}.built
COMMENT "Kernel make modules ${module_name}"
VERBATIM
)

添加自定义目标,它总是过时,但如果您希望自动调用它,请添加ALL,否则您必须明确地调用make module_build,我想这就是您想要的。< / p>

ADD_CUSTOM_TARGET("${module_name}_build" ALL
DEPENDS  ${depends_module_ksyms}
${CMAKE_CURRENT_BINARY_DIR}/${module_name}.built
COMMENT "Building Kernel Module ${module_name}"
)