ADD_EXECUTABLE(<name> IMPORTED [GLOBAL])#向当前工程添加存放源文件的子目录,并指定中间二进制和目标二进制存放的位置。ADD_SUBDIRECTORY(source_dir [binary_dir] )#生成库。生成的库的类型有三种:SHARED,动态库;STATIC,静态库;MODULE,在使用 dyld的系统有效。ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [...
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC}) #对hello_static的重名为hello SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello") # cmake 在构建一个新的target 时,会尝试清理掉其他使用这个名字的库,如果没有清理还是会只会构建一个动态库,不会构建出静态库 SET_TARGET_PROPERTIES(hello...
GET_TARGET_PROPERTY(OUTPUT_VALUE hello_static OUTPUT_NAME) MESSAGE(STATUS "This is the hello_static OUTPUT_NAME:"${OUTPUT_VALUE}) 如果没有这个属性定义,则返回NOTFOUND。 构建结果会发现,libhello.a 已经构建完成,位于 build/lib 目录中,但是libhello.so 去消失了。这个问题的原因是:cmake 在构建一个...
ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC}) 然后再在build目录进行外部编译,我们会发现,静态库根本没有被构建,仍然只生成了一个动态库。因为hello作为一个target是不能重名的,所以,静态库构建指令无效。 如果我们把上面的hello修改为hello_static: ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC}) 就可以构建一...
EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径 LIBRARY_OUTPUT_PATH:库文件路径 CMAKE_BUILD_TYPE::build 类型(Debug, Release,)CMAKE_BUILD_TYPE=Debug BUILD_SHARED_LIBS:Switch between shared and static libraries 内置变量的使用: >> 在CMakeLists.txt中指定,使用set ...
arguments "-DANDROID_STL=c++_static" } } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } 再说动态链接运行时库: 因为默认情况下,所有平台都是默认的动态链接运行时库,所以只要你不明确的指定是静态链接运行时库,那么它就一定是动态链接运行时库。
#include"static/Hello.h" 链接库# 在创建使用库的可执行文件时,你必须告诉编译器有关库的信息。这可以使用target_link_library()函数来完成。 add_executable(hello_binary src/main.cpp )target_link_libraries( hello_binary PRIVATE hello_library
INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) INSTALL(FILEShello.h DESTINATIONinclude/hello) : 仍然采用out-of-source编译的方式,按照习惯,我们建立一个build目录,在build 目录中 cmake .. make 这时,你就可以在lib目录得到一个libhello.so,这就是我们期望的共享库。
也就是ADD_LIBRARY()或者ADD_EXECUTABLE()指令同一构建目标同时只能出现一次 那如果改成ADD_LIBRARY(math MODULE ${SRC_LIST})和ADD_LIBRARY(static_math STATIC ${SRC_LIST}) 会怎样?试着执行发现最终构建成功,再build/lib目录下同时生成了libstatic_math.a和libmath.so两个文件 ...
cmake_minimum_required(VERSION3.5)project(hello_library)#将hello.cpp打包成静态库add_library(hello_librarySTATICsrc/hello.cpp)#设置包含目录target_include_directories(hello_library#目标PUBLIC${PROJECT_SOURCE_DIR}/include#包含)#———创建可执行程序———add_executable(hello_binary src/main....