如何为我构建的每个库指定编译器标志?

发布于 2025-01-11 08:11:43 字数 664 浏览 0 评论 0原文

我正在使用 CMAKE (Android) 构建几个静态和共享库。我有一个 CMakelists.txt 文件,它构建所有共享库和静态库。

现在我已经指定了适用于所有库的 C 和 C++ 编译器标志。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpermissive -fno-elide-constructors -DHAVE_POLL -DANDROID -DNO_SSL_DL -DUSE_IPV6 mfloat-abi=softfp -mfpu=neon")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++14 -fpermissive -fno-elide-constructors -DHAVE_POLL -DANDROID -DNO_SSL_DL -DUSE_IPV6 mfloat-abi=softfp -mfpu=neon")

但是,我需要为我正在构建的每个库指定不同的 C 标志和 CXX 标志集。因此,对于 lib1.so,我有一组 C 和 CXX 标志,对于 lib2.so,我有另一组 C 和 CXX 标志。

我想我可以使用 set_target_properties 但我不知道如何使用,而且我无法找到一个示例来展示如何使用 set_target_properties 为库设置 C 和 C++ 编译器标志。

I am using CMAKE (Android) to build several static and shared libraries. I have one CMakelists.txt file which builds all the shared and static libraries.

Right now I have specified C and C++ compiler flags that apply to all the libraries.

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpermissive -fno-elide-constructors -DHAVE_POLL -DANDROID -DNO_SSL_DL -DUSE_IPV6 mfloat-abi=softfp -mfpu=neon")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++14 -fpermissive -fno-elide-constructors -DHAVE_POLL -DANDROID -DNO_SSL_DL -DUSE_IPV6 mfloat-abi=softfp -mfpu=neon")

However, I have a need to specify different sets of C flags and CXX flags for each library that I am building. So for lib1.so I have one set of C and CXX flags and for lib2.so I have another set of C and CXX flags.

I think I can use set_target_properties but I am not sure how and I wasn't able to find an example that shows me how to use set_target_properties to set the C and C++ compiler flags for a library.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

等待圉鍢 2025-01-18 08:11:43

您需要将 target_compile_options/target_compile_definitions生成器表达式

像这样的东西:

set(C_FLAGS -some -c -flags)
set(CPP_FLAGS -some -cpp -flags)
set(C_DEFS -DCDEF -DANOTHER_DEF)
set(CPP_DEFS -DCPP_DEF -DANOTHER_DEF)
target_compile_options(YourTarget
  PRIVATE "
lt;
lt;COMPILE_LANGUAGE:CXX>:${CPP_FLAGS}>" 
          "
lt;
lt;COMPILE_LANGUAGE:C>:${C_FLAGS}>"
)
target_compile_definitions(YourTarget
  PRIVATE "
lt;
lt;COMPILE_LANGUAGE:CXX>:${CPP_DEFS}>"
          "
lt;
lt;COMPILE_LANGUAGE:C>:${C_DEFS}>"
)

You need to use target_compile_options/target_compile_definitions with generator expressions.

Something like this:

set(C_FLAGS -some -c -flags)
set(CPP_FLAGS -some -cpp -flags)
set(C_DEFS -DCDEF -DANOTHER_DEF)
set(CPP_DEFS -DCPP_DEF -DANOTHER_DEF)
target_compile_options(YourTarget
  PRIVATE "
lt;
lt;COMPILE_LANGUAGE:CXX>:${CPP_FLAGS}>" 
          "
lt;
lt;COMPILE_LANGUAGE:C>:${C_FLAGS}>"
)
target_compile_definitions(YourTarget
  PRIVATE "
lt;
lt;COMPILE_LANGUAGE:CXX>:${CPP_DEFS}>"
          "
lt;
lt;COMPILE_LANGUAGE:C>:${C_DEFS}>"
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文