-D CMAKE_C_COMPILER
是我用来选择我的编译器。但是,如果我有像USEIPHONEFLAG
那样打开/关闭的CMake选项,则需要执行-DUSEIPHONEFLAG=1
,-D USEIPHONEFLAG=1
不起作用。我想知道-D
之后的空间是如何在CMake中工作的。cmake中的-D选项间距
回答
http://cmake.org/cmake/help/v2.8.8/cmake.html#command:add_definitions
提供的例子似乎表明,add_definitions应该没有把一个定义范围内的空间内使用。您是使用add_definitions还是在调用cmake时设置了编译器?
我认为OP是指CMake的参数;当你调用CMake本身时通过的,而不是通过'add_definitions'设置的预处理器定义。 – Fraser 2013-06-19 02:28:42
不幸的是,CMake的命令行解析不是非常一致或强大。
此问题可能是您传递参数的顺序。
在内部,CMake遍历命令行参数两次。它第一次寻找非缓存参数,并跳过任何以-D
开头。任何不符合正确参数列表的文件都被假定为CMakeLists.txt文件(或目录或CMakeCache.txt)的路径。
它假定只会有一条路径通过,并且不会验证该假设。这就是问题所在。如果您已通过,则-D
被视为完整参数并被跳过,Foo=1
被视为路径。
在通过参数的第二次迭代中,它现在获取通过-D
给出的值,但在此运行中它正确处理了-D
之后的空格。所以它明白正在设置Foo
到1
。
因此,您的命令行中路径的位置在这里非常重要。
cmake -D Foo=1 MyProject/CMakeLists.txt # --> Works
cmake MyProject/CMakeLists.txt -D Foo=1 # --> Fails
更复杂的是,你可以在引号包裹的空间,并有CMake的解析它,但变量名则包括空间,是在CMakeLists文件不可用。
cmake MyProject/CMakeLists.txt "-D Foo=1" # --> Defines the unusable var ${ Foo}
另一个不一致是其它命令行标志具有或不具有空间(例如-G
)工作,以及其他需要的空间(例如-E
)。
我自己的建议是总是避免在标志后面加一个空格,除非是必需的。我想总是通过最后的路径也会有所帮助,但如果不添加额外的空格,则不需要这样做。
- 1. 选项卡之间的间距TabPageIndicator
- 2. 的Java AWT的字体间距选项
- 3. 读:非法-d选项
- 4. CMAKE字符串选项
- 5. 创建CMake组选项
- 6. CMake多选项设置
- 7. WPF选项卡控件之间的标题间距
- 8. 减少项目之间的间距 - 多选择下拉
- 9. 在java中传递-d选项
- 10. 在CPacCKConfig.cmake中添加-D选项
- 11. 设置选择框中的间距
- 12. CMake的配置等同的GCC选项
- 13. 菜单项之间的间距(CSS)
- 14. 如何在复选框列表项之间添加间距?
- 15. CMake用户指定的选项
- 16. 如何摆脱Android应用程序中选项卡之间的间距?
- 17. 在JavaFX中禁用TextFlow中的项目之间的间距
- 18. HTML DIV并选择间距
- 19. 删除导航栏选项之间的差距
- 20. Cmake中的可选目标
- 21. Silverlight中的间距
- 22. 数学复制距离d的路径
- 23. 如何减少导航栏中的项目之间的间距?
- 24. java编译器选项,即javac -d
- 25. G ++ -D选项添加数字1
- 26. 用多个-DCMAKE_CXX_FLAGS选项编译CMake
- 27. CMAKE选项-DXXX编译器参数
- 28. OpenCV作为静态库(cmake选项)
- 29. CMake更新选项(Make文件)
- 30. CMAKE选项包含一个目录
我一直发现''D'后面不能留下空格。我很惊讶'CMAKE_C_COMPILER'有一个空间。 CMake倾向于首先找到GNU编译器,所以如果你试图找到'gcc',那么它可能巧合地工作。 – SethMMorton 2013-05-05 05:20:26