作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 CMake 来定义我的项目。我的目标是让特定于平台的文件易于访问,以便在所有平台上进行编辑、搜索、浏览和源代码控制。
我目前在 cmake 描述中分隔了特定于平台的文件。我的 CMakeLists.txt 文件如下所示:
Foo.hpp
${platform_directory}/Foo.cpp
然后在磁盘上我有这样的东西:
Foo.hpp
win
`- Foo.cpp
osx
`- Foo.cpp
生成的项目文件如下所示:
Foo.hpp
Foo.cpp (platform-specific version)
这对于编译器来说是完美的,但这意味着开发人员缺少用于非本地平台特定文件的 IDE 工具。
我正在寻找的是这样的东西(在 Xcode 中):
Foo.hpp
Foo.cpp (OS X version)
win
`- Foo.cpp (file type set to plain text)
或者在 Visual Studio 中:
Foo.hpp
Foo.cpp (Windows version)
osx
`- Foo.cpp (build action set to none)
关于如何设置 CMake 这样的东西有什么想法吗?
最佳答案
一种方法是添加一个没有构建规则的自定义目标,专门用于保存不属于给定平台构建的文件;例如
if(WIN32)
add_library(Foo Foo.hpp win/Foo.cpp)
add_custom_target(NonWindows SOURCES osx/Foo.cpp)
source_group("osx" osx/Foo.cpp)
else(APPLE)
add_library(Foo Foo.hpp osx/Foo.cpp)
add_custom_target(NonApple SOURCES win/Foo.cpp)
source_group("win" win/Foo.cpp)
endif()
另一个选项(可能更接近您想要的,但更“hacky”)是将所有文件添加到目标,但将构建不需要的文件标记为 HEADER_FILE_ONLY
:
add_library(Foo Foo.hpp win/Foo.cpp osx/Foo.cpp)
if(WIN32)
set_source_files_properties(osx/Foo.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
source_group("osx" osx/Foo.cpp)
else(APPLE)
set_source_files_properties(win/Foo.cpp PROPERTIES HEADER_FILE_ONLY TRUE)
source_group("win" win/Foo.cpp)
endif()
关于c++ - CMake 选项禁用特定平台特定文件的编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14534790/
我是一名优秀的程序员,十分优秀!