CMakeList相关

参考资源http://www.cnblogs.com/wengzilin/p/4466708.html
官方文档:https://cmake.org/cmake/help/v3.0/manual/cmake-commands.7.html
编写CMakeLists.txt 1、指定头文件和源文件 include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) file(GLOB_RECURSE box2d_source_files "${CMAKE_CURRENT_SOURCE_DIR}/Box2D/*.cpp") set 将一个CMAKE变量设置为给定值。(属性的设置及set的一些说明可以看官方文档或者博客http://www.cnblogs.com/coderfenghc/archive/2012/10/20/2712806.html) set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE]) 将变量<variable>的值设置为<value>。在<variable>被设置之前,<value>会被展开。如果有CACHE选项,那么<variable>就会添加到cache中; 这时<type>和<docstring>是必需的。 <type>被CMake GUI用来选择一个窗口,让用户设置值。<type>可以是下述值中的一个: FILEPATH = 文件选择对话框。 PATH = 路径选择对话框。 STRING = 任意的字符串。 BOOL = 布尔值选择复选框。 INTERNAL = 不需要GUI输入端。(适用于永久保存的变量)。 如果在一个变量中添加东西可以使用set,SET 命令用于将文件组成一个列表。 例如:在CMAKE_CURRENT_SOURCE_DIR中添加源文件 SET(CMAKE_CURRENT_SOURCE_DIR Hell.c File2.c File3.c) set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} test_image_src ) 如果有多个变量添加,可以使用for循环,例如: foreach(exename ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(${exename} folder/${filename}.cu) target_link_libraries(${exename} ${TESTS_LINK_LIBS}) endforeach() 2、添加环境变量(可选, added by 编程小翁, 博客园) add_definitions( -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT -DENV_UNIX -DBREAK_HANDLER -DUNICODE -D_UNICODE) 如果需要判断平台,可以这么写: IF(APPLE) add_definitions(-DENV_MACOSX) FIND_LIBRARY(COREFOUNDATION_LIBRARY CoreFoundation) ENDIF(APPLE) 其中 FIND_LIBRARY还可以指定对应的路径,例如: #look for the Tcl library FIND_LIBRARY(TCL_LIBRARY NAMES tcl tc184 tc183 tc 182 tc 180 PATHS /usr/lib /usr/local/lib) IF (TCL_LIBRARY) TARGET_ADD_LIBRARY (Hello TCL_LIBRARY) ENDIF(TCL_LIBRARY) 3、设置生成库的名字跟类型 举例: add_library(Box2D STATIC ${box2d_source_files}) 这里add_library表示最终编译为一个库,static表示是静态库,如果想编译动态库,可以修改为shared. 至此,一个静态库的配置就完成了。当然,因为这个库没有包括其它外部的头文件,所以会比较简单。 4、Get a specific component of a full filename. get_filename_component(<VAR> <FileName> <COMP> [CACHE]) Set <VAR> to a component of <FileName>, where <COMP> is one of: DIRECTORY = Directory without file name NAME = File name without directory EXT = File name longest extension (.b.c from d/a.b.c) NAME_WE = File name without directory or longest extension ABSOLUTE = Full path to file REALPATH = Full path to existing file with symlinks resolved PATH = Legacy alias for DIRECTORY (use for CMake <= 2.8.11) 举例: file(GLOB_RECURSE examples_srcs "${PROJECT_SOURCE_DIR}/examples/*.cpp") foreach(source_file ${examples_srcs}) # get file name get_filename_component(name ${source_file} NAME_WE) # get folder name get_filename_component(path ${source_file} PATH) get_filename_component(folder ${path} NAME_WE) add_executable(${name} ${source_file}) target_link_libraries(${name} ${Caffe_LINK}) caffe_default_properties(${name}) # set back RUNTIME_OUTPUT_DIRECTORY set_target_properties(${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/examples/${folder}") caffe_set_solution_folder(${name} examples) # install install(TARGETS ${name} DESTINATION bin) if(UNIX OR APPLE) # Funny command to make tutorials work # TODO: remove in future as soon as naming is standartaized everywhere set(__outname ${PROJECT_BINARY_DIR}/examples/${folder}/${name}${CAffe_POSTFIX}) add_custom_command(TARGET ${name} POST_BUILD COMMAND ln -sf "${__outname}" "${__outname}.bin") endif() endforeach() 5、一个完整的CMakeList,如果还有新的CMakeList.txt需要包含进来,可以使用add_subdirectory(${sub_cmakelistpath}) cmake_minimum_required(VERSION 3.2) #1、添加头文件目录,可以多引用,但是不能缺,因为缺了就编译不过 include_directories( "../../../myWindows" "../../../" "../../../include_windows" ) #2、添加环境变量,请结合实际项目要求,不是必须的 add_definitions( -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT -DENV_UNIX -DBREAK_HANDLER -DUNICODE -D_UNICODE) IF(APPLE) add_definitions(-DENV_MACOSX) FIND_LIBRARY(COREFOUNDATION_LIBRARY CoreFoundation ) ENDIF(APPLE) #FIND_LIBRARY命令用于寻找在一些指定目录下的特定的相关COREFOUNDATION_LIBRARY库文件,还可以指定对应的库路径 #3、源文件 file(GLOB_RECURSE src_files "../../../../C/7zCrc.c" "../../../../C/7zCrcOpt.c" "../../../../C/7zStream.c" "../../../../C/Aes.c" "../../../../C/Alloc.c" "../../../../C/Bra.c" "../../../../C/Bra86.c" ) #4、设置生成静态库以及名称 add_library(myLibName STATIC ${src_files}) IF(APPLE) TARGET_LINK_LIBRARIES(myLibName ${COREFOUNDATION_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) ELSE(APPLE) IF(HAVE_PTHREADS) TARGET_LINK_LIBRARIES(myLibName ${CMAKE_THREAD_LIBS_INIT}) ENDIF(HAVE_PTHREADS) ENDIF(APPLE) #5、生成执行文件 add_executable(${exename} folder/${src_files}) target_link_libraries(${exename} ${TESTS_LINK_LIBS}) 6、属性设置 set_property set_source_files_properties set_target_properties set_target_properties(target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...) 举例: add_library(ppl_static STATIC ${PPL_${ARCH}_SRC}) #生成静态库 set_target_properties(ppl_static PROPERTIES OUTPUT_NAME "ppl") #设置输出名字 set_target_properties(ppl_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) #设置为使用clean时,可清除

 

你可能感兴趣的:(CMakeList相关)