我创建了一个项目,该项目分为几个目录,每个目录在add_library(SubdirectoryProject SHARED ${ALL_FILES})
CMake 中创建一个共享库。
我有一个test
我使用的子目录
add_executable(unittest ${ALL_FILES})
# Dependencies
target_link_libraries(unittest
PUBLIC
GTest::GTest
Boost::log
Boost::json
magic_enum::magic_enum
SubdirectoryProject
)
find_package(GTest REQUIRED)
enable_testing()
include(GoogleTest)
gtest_discover_tests(unittest)
Run Code Online (Sandbox Code Playgroud)
一切都构建得很好。但是,在构建测试时,cmake(或 GTest)也会尝试运行已编译的unittest
二进制文件来发现测试。在 Windows 上,这不起作用,因为测试二进制文件位于其自己的构建文件夹中,而来自其他子项目的构建(共享)DLL 位于各自的文件夹中。Windows 没有 rpath。因此,执行测试二进制文件失败,并出现找不到库的错误。
那么该怎么办?在发现测试之前我真的必须手动复制 DLL 吗?我觉得必须有一种 cmake 方式来正确且自动地执行此操作,但我找不到任何东西。
我在使用中遇到一些问题iframe
。我一次会问一个问题。我正在LaTeX.js 游乐场上工作,想要添加一些 JavaScript 来处理\marginpar
s,但无论我做什么,Chrome 和 Firefox 都不会尝试加载脚本。如果在任何框架之外使用完全相同的代码,它就会起作用。
我尝试了绝对路径和相对路径,并且尝试了file
、http
和https
协议。总是相同的结果。
这是相关代码:
<iframe id="preview" sandbox="allow-same-origin allow-scripts">
<html>
<head>
<title>LaTeX.js Show­case</title>
<meta charset="UTF-8">
<link type="text/css" rel="stylesheet" href="css/katex.css">
<link type="text/css" rel="stylesheet" href="css/article.css">
<link type="text/css" rel="stylesheet" href="css/error.css">
<script src="https://latex.js.org/js/base.js"></script>
</head>
...
Run Code Online (Sandbox Code Playgroud)
问题是base.js
。开发人员工具在控制台中没有显示任何错误,在源选项卡中没有显示任何条目,在网络选项卡中也没有显示任何条目。
更新:正如我在评论中所说,上面的代码是使用 JavaScript 修改 DOM 的结果;但是,设置iframe.contentWindow.document.documentElement
似乎不会触发加载脚本<head>
,只有答案中的选项 2 对我有用。
通过使用以下方法引用id="sec-id"
同一页面上的另一个元素,可以使用同一页面链接
<a href="#sec-id"></a>
Run Code Online (Sandbox Code Playgroud)
例如。这样的链接是相对的。
但是,如果我在LaTeX.js游乐场的iframe中使用相同的语法,则它不仅会滚动到目标元素,而且还会在ifame中(重新)加载整个游乐场页面。(请注意,我通过编程方式设置了iframe的内容iframe.srcdoc = html
)
示例:LaTeX.js操场,在第一部分的结尾处,单击“另请参阅第11部分”中的链接。在右侧的iframe中。
可能是什么原因?
UPDATE:现在我明白了问题的根源:浏览器使用文档的基本URL来使所有相对URL都是绝对的(请参阅参考资料<base>
)。麻烦始于其iframe的内容设置为srcdoc
:没有指定唯一的基本URL,在这种情况下,将使用父框架/文档的基本URL(在我的情况下为游乐场)(请参阅HTML标准)。
因此,问题就变成了:有没有办法srcdoc
在基本URL中引用iframe?还是有可能使浏览器不在基础之上?或制作不更改相对#sec-id
URL 的基本URL?
似乎我必须在解析HTML主体后才定义自定义元素.如果我之前定义它,则自定义元素的内容为空.
这是一个MWE:
<!DOCTYPE html>
<html lang="en">
<head>
<script>
customElements.define('test-one',
class extends HTMLElement {
constructor() {
super()
console.log(this.textContent)
}
}
)
</script>
</head>
<body>
<test-one>First.</test-one>
<test-two>Another.</test-two>
<script>
customElements.define('test-two',
class extends HTMLElement {
constructor() {
super()
console.log(this.textContent)
}
}
)
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
test-one
输出""
在控制台中,test-two
输出"Another."
.
然而,这似乎完全不直观,我浪费了很多时间阅读规范,但我没有找到这种行为的解释.有任何想法吗?指定或记录在哪里?这不是Chrome问题,Firefox表现相同.