从autotool迁移到cmake:其他的一些cmake技巧

具体的一些用法可以看文档,这里只贴一些快捷的代码

获取程序的位置

find_program (AWK_PATH NAMES awk gawk awk.exe gawk.exe PATH_SUFFIXES /usr/bin REQUIRED)
if(${AWK_PATH} STREQUAL AWK_PATH-NOTFOUND)
    message("AWK_PATH back to awk")
    set(AWK_PATH awk)
endif()
message("find awk " ${AWK_PATH})
find_program (CPP_PATH NAMES cpp REQUIRED)
message("find cpp " ${CPP_PATH})

对windows平台特殊处理(含mingw)

if (WIN32)
else()
endif ()

添加宏定义(粗糙做法)

add_definitions(-DHAVE_CONFIG_H)

手动添加依赖关系

add_dependencies(A B)

这个会保证B构建完后才会构建A

一般来讲,target依赖不需要显式的写,写了

target_link_libraries(A B)

都会自动处理好。
但是,有的时候会增加一些奇奇怪怪的操作,所以,没办法。

遍历目录

注意这里要写绝对路径

file(GLOB c_scheme_subdirs RELATIVE ${CMAKE_SOURCE_DIR}/examples/c_scheme ${CMAKE_SOURCE_DIR}/examples/c_scheme/*)
foreach(subdir ${c_scheme_subdirs})

endforeach()

这里要特别注意一下,后面那个加xxxdir/*是不能丢的

获取当前目录名

正则实现

STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )

对target改名

特别适合又用生成动态库,又要生成静态库的场景。
cmake的target不能重名,所以要手动改一下输出的名字

set_target_properties(${CURRENT_FOLDER} PROPERTIES OUTPUT_NAME box)

OK,先抄这么多,后面有遇到再写吧
cmake还是挺好的

你可能感兴趣的:(工具,autotool,cmake)