CMAKE 生成VS2008静态库工程 与 CMAKE使用,CMakeLists.txt编写总结
cmake -G"Visual Studio 9 2008 Win64"
以上命令得用cd命令切换到顶层CMakeLists.txt的当前目录,才能生效
以下是CMakeLists.txt的代码
cmake_minimum_required(VERSION 2.8) PROJECT(FFI) add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-D_LIB) #包含工程所需要的头文件路径
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/src/x86) #add_subdirectory(src) #设置源文件的相对路径和文件名
#PROJECT_SOURCE_DIR变量为最顶层Cmakelists.txt的路径
set(SRC ${PROJECT_SOURCE_DIR}/src/closures.c
${PROJECT_SOURCE_DIR}/src/debug.c
${PROJECT_SOURCE_DIR}/src/prep_cif.c
${PROJECT_SOURCE_DIR}/src/raw_api.c
${PROJECT_SOURCE_DIR}/src/types.c
${PROJECT_SOURCE_DIR}/src/x86/ffi.c
${PROJECT_SOURCE_DIR}/src/x86/ffi64.c
${PROJECT_SOURCE_DIR}/src/x86/win64.asm
) #file(GLOB FFI_SRC blocksort.c bzilb.c compress.c crctable.c decompress.c huffman.c rendtable.c )
#file(GLOB FFI_HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) #source_group("Header Files" FILES ${ZLIB_HDR})
ADD_LIBRARY(FFI STATIC ${SRC} ) set_target_properties(FFI PROPERTIES COMPILE_FLAGS "/EHsc /GF")
#set_target_properties(ZLib PROPERTIES COMPILE_FLAGS "/GF") #VERY IMPORTANT: can not use twice. #set_source_files_properties(${ZLIB_SRC} PROPERTIES COMPILE_FLAGS "/EHsc") #every file compile option. set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
string(REPLACE "/Ob0" "" ${CompilerFlag} "${${CompilerFlag}}")
string(REPLACE "/TC" "" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
TIPS:CMakeLists.txt为描述编译链接的规则文件,也就是CMAKE这个软件是根据解析这个txt文件来创建VS2008这个工程文件的(.sln, vcproject),Linux下工程文件为makefile,既然是工程文件肯定要有头文件和源文件,还有lib库依赖项,因为整个工程生成的是lib库,所以就不用add_subdirectory等一些命令了。
以下是某个cnblog的好心程序员翻译的Cmake官方手册文档:
http://www.cnblogs.com/coderfenghc/archive/2012/06/16/CMake_ch_01.html
references:
http://www.cmake.org/Wiki/CMake_FAQ#Writing_CMakeLists.txt
http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library
http://www.cmake.org/pipermail/cmake/2010-March/035992.html
http://blog.csdn.net/dbzhang800/article/details/6314073
http://blog.csdn.net/joyyoj/article/details/6134039
TIPS:如果CMakeLists.txt内容有更改,需要重新cmake命令的话,应该把CmakeCache.txt和相关文件一起删除,以保证cmake不读取旧数据。
CMAKE 生成VS2008静态库工程 与 CMAKE使用,CMakeLists.txt编写总结的更多相关文章
- opencv+ linux + cmake 生成 opencv静态库
您可以省去如下步骤,直接下载我编译好的: http://download.csdn.net/detail/u011258240/9710331 一.编译opencv2.4 不带contrib 1. ...
- (转)HelloWorld CMake CMake中构建静态库与动态库及其使用
继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello ...
- 使用CMake编译跨平台静态库
在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑.因为很多开源的程序,比如png,都是自带编译脚本的.我们可以使用下列脚本来进行编译: . / con ...
- cmake 强制链接静态库
add_executable(main main.cpp) target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a) 静态库和动态库共 ...
- Xcode命令行生成Bitcode静态库
近两三年一直在做静态库开发 1.在Xcode工程中创建静态库的Target,最初是手动Build出真机的.a文件,模拟器的.a文件,然后再用命令行合并 2.后来一些特殊的开发者,要求加入特殊的功能,或 ...
- Makefile 自动搜索 c 和 cpp 文件, 并生成 .a 静态库文件
最近 又弄linux 下的 .a 静态库编译, 于是想 做个 一劳永逸的Makefile, 经过一番折腾, 最后成功了 只需要 改两个 参数 就可以执行了(MYLIB 和 VPATH), 代码 如下: ...
- CMake之CMakeLists.txt编写入门
自定义变量 主要有隐式定义和显式定义两种. 隐式定义的一个例子是PROJECT指令,它会隐式的定义< projectname >_BINARY_DIR和< projectname & ...
- Cmake编译成静态库
To build OpenCV as static library you need to set BUILD_SHARED_LIBS flag to false/off: cmake -DBUILD ...
- 利用CMake生成动态或静态链接库工程
install解释: TARGETS版本的install命令 install(TARGETS targets... [EXPORT <export-name>] [[ARCHIVE|LIB ...
随机推荐
- delphi7开发webservice部属在apache服务器中 转
delphi7开发webservice部属在apache服务器中 delphi7 webservice apache 用Delphi7开发Web Service程序,并把服务程序放在apache We ...
- 解耦——Hybrid H5跨平台性思考
跨平台,是HTML5最重要的能力之一.而Hybrid H5因强依赖于具体App,往往不具有跨平台性.这时,将强依赖关系解耦,即可恢复HTML5的跨平台能力.近期我负责手Q红包打赏项目的前端开发,因项目 ...
- 安卓学习之路 -- JAVA多线程下载
代码没有优化,暂时先实现结果 package download; import java.io.File; import java.io.InputStream; import java.io.Ran ...
- android 限制adb的访问目录
最近有个特殊的要求,engneer版本既要可以adb访问,且adb有的目录不能访问 如/data/目录. 用传统的chmod chgrp等无法满足客户需求,只能修改内核文件系统部分. 添加函数,检查路 ...
- (step4.3.1) hdu 1010(Tempter of the Bone——DFS)
题目大意:输入三个整数N,M,T.在接下来的N行.M列会有一系列的字符.其中S表示起点,D表示终点. .表示路 . X表示墙...问狗能有在T秒时到达D.如果能输出YES, 否则输出NO 解题思路:D ...
- [React Testing] JSX error diffs -- expect-jsx library
When writing React component tests, it can be hard to decipher the error diffs of broken tests, sinc ...
- Android 字体设置
Android 对中文字体支持很不好~~ 需要加入相应的字体库 (1)创建布局Layout //创建线性布局 LinearLayout linearLayout=newLinearLayout(thi ...
- Android Fragment详解(二):Fragment创建及其生命周期
Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...
- RedHat下GCC及G++的安装
GCC的安装: 切换到安装光盘目录下: #mount /dev/cdrom /mnt/cdrom #cd /mnt/cdrom 安装GCC依赖的*rpm程序,必须按照顺序依次执行: #rpm - ...
- ls 命令详解
1.ls基本语法及选项 用法:ls [选项]... [文件]... List information about the FILEs (the current directory by default ...