关于CMake的诡异问题!!!

FRanKwudd 2011-10-09 04:40:33
现有一个庞大的工程,自带编译系统可以编译,现在需要使用CMake完成编译库和编译出测试库的可执行文件。库需要编译dll的debug&release和static的debug&release版本。现在库都编译完了,完全没有问题,但是现在我编的测试程序出了问题。
Win32与Win64位系统下头文件和源文件完全相同,只是编译选项不同,生成库的编译选项如下:
if( CIP_64BIT )
set( CMAKE_CXX_FLAGS "/D_MBCS /GS /EHsc /W3 /nologo /c /Wp64 /GR /fp:fast /DCIP_FRAMEWORK_VERSION=0x01050100 /DWIN64")
else( CIP_64BIT )
set( CMAKE_CXX_FLAGS "/D_MBCS /GS /EHsc /W3 /nologo /c /Wp64 /GR /fp:fast /DCIP_FRAMEWORK_VERSION=0x01050100 /DWIN32")
endif( CIP_64BIT )
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} /D_DEBUG /MDd /RTC1 /Z7 /Od")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /DNDEBUG /MD /O2")


这个库有三个测试程序,如下:
+--------------+--------------+---------------+---------------+
| 测试程序 | libAtest | libA-mttest | libA-pltest |
+--------------+--------------+---------------+---------------+
| 加入的特殊宏 | 无 | MT_TEST | PL_TEST |
+--------------+--------------+---------------+---------------+
libAtest与其他两个唯一的区别在于编译时分别加入了名为MT_TEST和PL_TEST的宏。使用的语句如下:
set_source_files_properties( ${SRCS_TEST_LIBA} PROPERTIES COMPILE_FLAGS "-D_LINK_OTHER_DLL -DCIP_MT_TEST" )

(说这么复杂,估计看的人都费劲)

问题在于:
Win32平台下编译出来的测试唯独libA-mttest出了问题(包括四个版本的测试dll&static下debug&release),有两个错误(应该是0 error)。
Win64平台下是dll&static下的release的libAtest、libA-mttest、libA-pltest都有一个错误。

在工程自带的编译系统下都不存在这些问题。经过互换库的试验后发现问题就出现在测试程序上。此问题不指望能得到准确的解决办法,只希望有cmake经验的前辈能给点建议,指出一些cmake容易出问题的地方。
...全文
162 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
FRanKwudd 2011-10-10
  • 打赏
  • 举报
回复
补充!!!出现的错误不是编译错误,而是测试exe文件的执行错误!我们是按照客户给的自带编译系统做出来的,源文件头文件编译参数都没问题。感觉是不是cmake有些地方用错了啊。

关键是这代码还不能给别人看,所以没人能给得出解决办法。交流一下大虾们的心得也是好的啊!
FRanKwudd 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loaden 的回复:]

引用 3 楼 frankwudd 的回复:
补充!!!出现的错误不是编译错误,而是测试exe文件的执行错误!

执行错误是CRT问题?还是在CPU架构问题?
抓个执行错误的图,或者描述一下里面的文本。
否则:只能瞎猜。

另外,还可以考虑生成VS工程后再编译测试。
[/Quote]
问题是我们写的编译系统在Linux和Mac上都没问题,动态静态库都拆开了查看函数和obj全都没问题,编译选项都是按照原来的写的。原来默认的编译系统编出来就好使,我们这个就是有错误,哪哪都检查了啊
FRanKwudd 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 loaden 的回复:]

引用 3 楼 frankwudd 的回复:
补充!!!出现的错误不是编译错误,而是测试exe文件的执行错误!

执行错误是CRT问题?还是在CPU架构问题?
抓个执行错误的图,或者描述一下里面的文本。
否则:只能瞎猜。

另外,还可以考虑生成VS工程后再编译测试。
[/Quote]
1.
assertion failed
- Expression: false
- error_message = CIP_Thread::create()

2.
assertion failed
- Expression: eng != NULL

两个断言错误,生成VS工程中查看编译选项也都对,在VS里执行也是两个错误。只是编libA-mttest时加上MT_TEST宏就错了,我试过去掉就没问题了。去掉就和libAtest一样了。
老邓 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 frankwudd 的回复:]
补充!!!出现的错误不是编译错误,而是测试exe文件的执行错误!
[/Quote]
执行错误是CRT问题?还是在CPU架构问题?
抓个执行错误的图,或者描述一下里面的文本。
否则:只能瞎猜。

另外,还可以考虑生成VS工程后再编译测试。

老邓 2011-10-09
  • 打赏
  • 举报
回复
还是先把错误帖出来吧。
根据错误信息google答案:CMake的问题,基本上都要自己搞定的。
xunxun 2011-10-09
  • 打赏
  • 举报
回复
不知道是什么错误

第一感觉是编译开关可能有所变化
链接开关也有可能

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧