cmake之函数

 

函数

添加函数

为每个源文件添加 __FILENAME__

# utils.cmake

#重新定义当前目标的源文件的 __FILENAME__ 宏
function(redefine_file_macro targetname)
    #获取当前目标的所有源文件
    get_target_property(source_files "${targetname}" SOURCES)
    #遍历源文件
    foreach(sourcefile ${source_files})
        #获取当前源文件的编译参数
        get_property(defs SOURCE "${sourcefile}"
            PROPERTY COMPILE_DEFINITIONS)
        #获取当前文件的绝对路径
        get_filename_component(filepath "${sourcefile}" ABSOLUTE)
        #将绝对路径中的项目路径替换成空,得到源文件相对于项目路径的相对路径
        string(REPLACE ${PROJECT_SOURCE_DIR}/ "" relpath ${filepath})
        message(STATUS "relpath: ${relpath}") 
        #将我们要加的编译参数(__FILENAME__ 定义)添加到原来的编译参数里面
        list(APPEND defs "__FILENAME__=\"${relpath}\"")
        #重新设置源文件的编译参数
        set_property(
            SOURCE "${sourcefile}"
            PROPERTY COMPILE_DEFINITIONS ${defs}
            )
    endforeach()
endfunction()

使用

cmake_minimum_required(VERSION 3.10)
project(easylog_test)

add_executable(easylog_test easylog_test.cpp)
REDEFINE_FILE_MACRO(easylog_test)

target_link_libraries(easylog_test PUBLIC easylogger.lib)