目标输出文件的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生成器还有更多工作要做:
-
fancy_lib_location
将包含对Visual-Studio特定的$(OutDir)
引用的embedded式引用,您将不得不用CMAKE_BUILD_TYPE
CMakevariables(parsing为Debug
或Release
)的值replace。 - 至less对于CMake 2.8.1,至less在Visual Studio的目标上,如果你已经设置了
CMAKE_DEBUG_POSTFIX
variables,那么它将不会被包含在值中(这可能是错误,也可能不是错误,我不知道) 。