目标输出文件的path

我有一个由add_library创build的.so库目标,并且需要将该库的绝对path传递给外部脚本。 现在我有${LIBRARY_OUTPUT_PATH}/${CMAKE_SHARED_LIBRARY_PREFIX}LangShared${CMAKE_SHARED_LIBRARY_SUFFIX}LIBRARY_OUTPUT_PATH在我的CMakeLists.txt定义)。 这看起来像是硬编码给我的,因为一旦目标被重命名或其一些属性被改变,它就会中断。 有没有办法获得add_library的输出的绝对path?

你应该为此使用一个生成器expression式 。

add_custom_command的文档和生成器expression式的文档:

COMMAND参数可以使用“生成器expression式”…

生成器expression式在生成系统生成过程中进行评估,以生成每个生成configuration特有的信息。

在这种情况下,假设您的库目标被称为“MyLib”,则表示构build库的完整path的生成器expression式将为:

 $<TARGET_FILE:MyLib> 

尝试:

 get_property(fancy_lib_location TARGET fancy_lib PROPERTY LOCATION) message (STATUS "fancy_lib_location == ${fancy_lib_location}") 

其中fancy_lib是使用add_library (fancy_lib SHARED ...)创build的目标。

我发现直接与Makefile生成器一起工作,但是由于fancy_lib_location的值不是您所期望的, fancy_lib_location Visual Studio生成器还有更多工作要做:

  1. fancy_lib_location将包含对Visual-Studio特定的$(OutDir)引用的embedded式引用,您将不得不用CMAKE_BUILD_TYPE CMakevariables(parsing为DebugRelease )的值replace。
  2. 至less对于CMake 2.8.1,至less在Visual Studio的目标上,如果你已经设置了CMAKE_DEBUG_POSTFIXvariables,那么它将不会被包含在值中(这可能是错误,也可能不是错误,我不知道) 。