小编Uma*_*had的帖子

将CMake接口库与对象库链接

我正在尝试使用接口库来定义预处理器宏。这些接口库随后将链接到其他库,以传播这些宏。这种方法适用于我正在创建的共享库,但不适用于CMake对象库。

我了解您不能直接将接口库链接到对象库,但是可以间接地将其链接TARGET_OBJECTS到接口库。

文件

尽管对象库可能无法在target_link_libraries()命令调用中直接命名,但是可以使用INTERFACE_SOURCES目标属性设置为name 的接口库间接“链接”它们$<TARGET_OBJECTS:objlib>

我尝试这样做,但是目标文件仍未使用适当的定义进行编译。这是最小的工作示例:

// a.cpp    
int a() {
  return
#ifdef MY_DEF
  5;
#endif
    }
Run Code Online (Sandbox Code Playgroud)

CMakeLists:

cmake_minimum_required(VERSION 3.0.1)
project(my_question)

add_library(object_lib OBJECT a.cpp)

add_library(interface_lib INTERFACE)
target_compile_definitions(interface_lib INTERFACE MY_DEF)

# This does not set the MY_DEF flag
target_sources(interface_lib INTERFACE $<TARGET_OBJECTS:object_lib>)

add_library(main_lib SHARED $<TARGET_OBJECTS:object_lib>)
target_link_libraries(main_lib)
Run Code Online (Sandbox Code Playgroud)

输出:

/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/object_lib.dir/build.make CMakeFiles/object_lib.dir/build
[ 50%] Building CXX object CMakeFiles/object_lib.dir/a.cpp.o
/Library/Developer/CommandLineTools/usr/bin/c++     -o CMakeFiles/object_lib.dir/a.cpp.o -c /Users/umar/devel/so_question/a.cpp
/Users/umar/devel/so_question/a.cpp:7:5: error: expected expression
    }
    ^
1 error generated.
make[2]: *** …
Run Code Online (Sandbox Code Playgroud)

cmake

7
推荐指数
2
解决办法
5464
查看次数

标签 统计

cmake ×1