如何根据一个标志在一个cmakeffiles .txt中生成不同的共享库



代码是用C++编写的,但它也提供了python-numpy接口,因此我们可以在with-numpywithout-numpy两种模式下编译它。在Makefile中,我们可以设置一个变量作为它的标志。例如,我们可以使用make生成libmylib.so,也可以使用make numpy=1生成libmylibpy.so。事实上,在Makefile中,我们使用numpy=1来定义CXXFLAGS-DNUMPY_INTERFACE

现在我想将项目更改为cmake项目。下面是没有numpy接口的最简单的CMakeFiles.txt:

    cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
    set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
    set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin)
    project(mylib)
    include_directories(include)
    add_library(mylib SHARED
    include/common.h
    include/util.h
    src/common.cpp
    src/util.cpp
    )

我如何将CMakeFiles.txt更新为标志,以生成具有或不具有numpy接口的不同共享库?

您应该添加一个构建选项。

# your library
add_library(mylib ...)
# add an option to include numpy
option(WITH_NUMPY "Determines whether to build with or without numpy.")
# if numpy is requested, set the NUMPY_INTERFACE preprocessor flag
if(WITH_NUMPY)
    target_compile_definitions(mylib PUBLIC NUMPY_INTERFACE)
endif()

您可以从GUI界面设置自定义WITH_NUMPY选项,或者使用cmake -DWITH_NUMPY=TRUE <path_to_source>从命令行设置。

注意,构建选项将被缓存。也就是说,如果您在以后的运行中没有再次指定该选项,它将继续重用上次运行的选项。

还请注意,您只在运行CMake时提供该选项,而不是在运行生成的Makefile以稍后构建时提供该选项。因此,如果你想改变选项,你还需要重新运行CMake.

最新更新