查找定义目标的目录

Mik*_*eMB 3 cmake

cmake 中有没有办法找到定义目标的 CMakeLists.txt 文件的源目录?

类似的东西:

if (TARGET Foo)
    message("Library Foo was alread built in ${LOCATION_OF_FOOS_CMAKE}")
else()
    add_library(Foo ...)
endif()
Run Code Online (Sandbox Code Playgroud)

编辑:
不幸的是,我的 cmake 脚本必须在默认的 ubuntu 14.04 安装上工作。所以我仅限于cmake 2.8

Flo*_*ian 7

您可以使用目标属性SOURCE_DIR(随CMake 3.7添加):

get_target_property(FOO_SOURCE_DIR Foo SOURCE_DIR)
Run Code Online (Sandbox Code Playgroud)

对于旧版本的 CMake,您可以覆盖 egadd_library()并定义您自己的SOURCE_DIR目标属性:

function(add_library _target)
    _add_library(${_target} ${ARGN})
    set_target_properties(${_target} PROPERTIES SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
endfunction(add_library)
Run Code Online (Sandbox Code Playgroud)