Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据一个标志在一个CMakeFiles.txt中生成不同的共享库_Cmake - Fatal编程技术网

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

如何根据一个标志在一个CMakeFiles.txt中生成不同的共享库,cmake,Cmake,代码是用C++编写的,但它也提供了pythonnumpy接口,因此我们可以用两种模式编译它:带numpy或不带numpy。在Makefile中,我们可以设置一个变量作为该文件的标志。例如,我们可以使用make生成libmylib.so,也可以使用makenumpy=1生成libmylibpy.so。事实上,在Makefile中,我们使用numpy=1来定义带有-DNUMPY\u接口的cxflags 现在我想将该项目更改为cmake项目。以下是最简单的cmakfiles.txt,没有numpy界面

代码是用
C++
编写的,但它也提供了
pythonnumpy
接口,因此我们可以用两种模式编译它:
带numpy
不带numpy
。在
Makefile
中,我们可以设置一个变量作为该文件的标志。例如,我们可以使用
make
生成
libmylib.so
,也可以使用
makenumpy=1
生成
libmylibpy.so
。事实上,在
Makefile
中,我们使用
numpy=1
来定义带有
-DNUMPY\u接口的
cxflags

现在我想将该项目更改为cmake项目。以下是最简单的
cmakfiles.txt
,没有
numpy
界面:

    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
    )
如何将
cmakfiles.txt
更新为一个标志,以生成具有或不具有
numpy
接口的不同共享库?

您应该添加一个标记

您可以使用_NUMPY
选项从GUI界面或使用cmake-DWITH_NUMPY=TRUE从命令行设置自定义的

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


还请注意,您仅在运行CMake时提供该选项,但在运行生成的Makefile以稍后生成时不提供该选项。因此,如果您想更改选项,还需要重新运行CMake。

谢谢,先生。但是我们应该使用
cmake2.8.11
或更高版本中的
target\u compile\u定义。
# 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()