在foo/CMakeLists.txt
基于这个和这个,我有以下
SET (EXTERNAL_LIB_ROOT "../../external_libs/")
ADD_LIBRARY (avcodec-debug STATIC IMPORTED)
SET_PROPERTY (
TARGET avcodec-debug PROPERTY IMPORTED_LOCATION
${EXTERNAL_LIB_ROOT}/libavcodec-0.8.10.a)
Run Code Online (Sandbox Code Playgroud)
在bar/CMakeLists.txt
我有这样的:
# old way uses system libraries
#TARGET_LINK_LIBRARIES (bar avformat avcodec avutil)
# new way uses local debug builds
TARGET_LINK_LIBRARIES (bar avformat avcodec-debug avutil)
Run Code Online (Sandbox Code Playgroud)
当我跑步时,make
我得到了
/usr/bin/ld: cannot find -lavcodec-debug
Run Code Online (Sandbox Code Playgroud)
如果我恢复到老样子,建设,触摸foo/CMakeLists.txt
和重建,CMake的的配置输出指示avcodec中调试是由编译系统发现.
那么为什么我不能将它添加为依赖?
小智 9
正如Angew上面提到的,导入库的可见性不同,但您可以使用GLOBAL修饰符扩展它.您可能已经足够修改下一个方式的add_library调用了
ADD_LIBRARY(avcodec-debug STATIC IMPORTED GLOBAL)
导入的目标不遵循与非导入目标相同的可见性规则.虽然非导入的目标是全局的(在定义之后可以从任何地方看到并且可以访问),但导入的目标仅CMakeLists.txt
在它们被定义的位置和下面可见(add_subdirectory()
在此定义的CMakeList中添加的目录中).
由于在您的情况下foo
是兄弟bar
,因此目标名称avcodec-debug
在内部不可见bar/CMakeLists.txt
,因此它被视为普通库名称.
通常首选在您包含的文件中定义导入的目标,而不是在自己的项目中定义.因此,改变(或提取的相关部分)foo/CMakeLists.txt
进入foo/avcodec.cmake
,然后在顶层CMakeList,更换
add_subdirectory(foo)
Run Code Online (Sandbox Code Playgroud)
同
include(foo/avcodec.cmake)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3831 次 |
最近记录: |