函数
添加函数
为每个源文件添加 __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)